"在负面可变长度的外观中使用\ G来限制外观背后的距离"的示例

Ron*_*Ron 7 python regex

在令人敬畏的正则表达式模块(https://pypi.python.org/pypi/regex)的pypi页面中,声明\ G可以"用于负可变长度的外观,以限制外观后移的程度".非常有趣,但页面没有给出任何例子,当我试图想象一个时,我的白带正则表达式只是窒息.

有谁可以描述一些示例用例?

Kob*_*obi 6

这是一个\G创造性地使用和负面观察的例子:

regex.match(r'\b\w+\b(?:\s(\w+\b)(?<!\G.*\b\1\b.*\b\1\b))*', words)
Run Code Online (Sandbox Code Playgroud)

words例如,应该是由单个空格分隔的一串字母数字字符"a b c d e a b b c d".

该模式将匹配一系列独特的单词.

  • \w+ - 匹配第一个单词.
  • (?:\s(\w+\b) )* - 匹配其他单词......
  • (?<!\G.*\b\1\b.*\b\1\b)- ...但是对于添加的每个新单词,检查它是否已经出现,直到我们到达\G.

在模式结尾处的限制\G可以在当前匹配上断言另一个条件,否则这是不可能的.基本上,模式是在正则表达式中使用AND逻辑的前瞻的变体,但不限于整个字符串.

这是.Net中的一个工作示例,它具有相同的功能.
尝试在Python 2中使用相同的模式findallregex模块给我一个分段错误,但match似乎工作.

  • 对我来说不会崩溃(Python 3.4.1)但 `findall` 返回 `['', '', '', '', '', '']` 这似乎没有用。`match` **does** 返回 `&lt;regex.Match 对象;span=(0, 9), match='abcd e'&gt;` 很简洁!-) (3认同)