在很棒的正则表达式模块的 pypi 页面中(https://pypi.python.org/pypi/regex https://pypi.python.org/pypi/regex)据说 \G 可以“在负可变长度后向中使用,以限制后向回溯的距离”。非常有趣,但该页面没有给出任何示例,当我尝试想象一个时,我的白带正则表达式只是窒息。
有人可以描述一些示例用例吗?
这是一个使用的示例\G
以及创造性的消极回顾:
regex.match(r'\b\w+\b(?:\s(\w+\b)(?<!\G.*\b\1\b.*\b\1\b))*', words)
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 逻辑的前瞻 https://stackoverflow.com/q/469913/7586,但不限于整个字符串。
这是一个在 .Net 中,它具有相同的功能。
在 Python 2 中尝试相同的模式findall
和regex
模块给了我一个分段错误,但是match
似乎有效。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)