完全匹配相同字符的N个重复

完全匹配相同字符的N个重复,第1张

完全匹配相同字符的N个重复

使用负前瞻 负后瞻。

这将是正则表达式:

(.)(?<!1.)1{N-1}(?!1)
除了Python的re模块已损坏(请参阅此链接)。

英文翻译:“匹配任何字符。请确保在匹配该字符之后,它之前的字符也不是该字符。再匹配该字符的N-1个重复。请确保这些重复之后的字符也不是字符。”

不幸的是,re模块(和大多数正则表达式引擎)已损坏,因为您不能在后置断言中使用反向引用。向后断言必须为恒定长度,并且编译器不够聪明,无法推断出何时使用了反向引用(即使在这种情况下,反向引用也具有恒定长度)。我们必须通过这种方式来处理正则表达式编译器,如下所示:

实际的答案 将是混乱:

r"(.)(?<!(?=1)..)1{N-1}(?!1)"

这可以通过使用

(?=1)..
代替
1.
(在大多数情况下,它们是等效的)解决re模块中的错误。这使regex引擎确切知道后置断言的宽度,因此可以在PCRE和re中工作。


当然,现实世界中的解决方案就像

[x.group() for x in re.finditer(r"(.)1*","xxaaaayyybbbbbzzccccxx") if len(x.group()) == 4]



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5663920.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存