如何解决使用 python 正则表达式查找非冗余、可能重叠、重复的字符串
给定一个长度为 2 到 5 个字母的重复序列的字符串,我想找到最大长度,可能与正则表达式重叠的子字符串。
对于非重叠模式,以下工作:
>>> import re
>>> rpt_re = re.compile(r'(\w{2,5})\1+')
>>> s = 'xyzABCDEABCDEABCDEzyxDEFDEFxyz'
>>> for match in rpt_re.finditer(s):
... print("{}: {}-{}".format(match.group(),match.start(),match.end()))
...
ABCDEABCDEABCDE: 3-18
DEFDEF: 21-27
但是对于下面两个重复单元重叠的情况,这个正则表达式不符合我的要求:
>>> s = 'xyzABCDEABCDEABCDEFDEFxyz'
>>> for match in rpt_re.finditer(s):
... print("{}: {}-{}".format(match.group(),match.end()))
...
ABCDEABCDEABCDE: 3-18
我想找到一个返回的模式:
ABCDEABCDEABCDE: 3-18
DEFDEF: 16-22
我可以看到在使用和不使用正则表达式的情况下实现这一点的复杂方法,但是有没有一种正则表达式模式可以在没有更多代码的情况下做到这一点?
编辑
从上面的原始描述中可能不清楚,我对查找重复子字符串的开始和结束感兴趣,所以我想标记 ABCDEABCDEABCDE
重复的开始和结束,但对完全包含在 BCDEABCDEA
重复中的内部重复 CDEABDEAB
、ABCDEABCDEABCDE
等。
然而,在第二个示例 'xyzABCDEABCDEABCDEFDEFxyz' 中,DEF
重复不是多余的,即使它与 ABDE
重复重叠,因为它超出了 {{1 }} 重复。
下面是另一种具有前瞻的方法,它接近并且只需要加入重叠的重复单元:
ABCDE
...但我希望有一些更简洁的东西,不需要代码来将重叠的匹配连接在一起。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。