Python 在非连续位置重复一个子串
我们应该如何编写一个正则表达式来捕获在非连续位置重复的子字符串? 例如,在Python 在非连续位置重复一个子串,python,regex,Python,Regex,我们应该如何编写一个正则表达式来捕获在非连续位置重复的子字符串? 例如,在aaabcaaa中,aaa在bc之间重复 \1只能用于替换,不能用于匹配模式,对吗?我们可以写(*)bc\1 是的,您可以在比赛中使用\1。我想你在问之前还没有试过?正则表达式可以是(.+)bc\1 >>> s = "aaabcaaa" >>> re.search(r'(.+)bc\1',s).group(1) 'aaa' 为了解决你的疑问,让我引用 模式中的反向引用允许您指定先前
aaabcaaa
中,aaa
在bc
之间重复
\1
只能用于替换,不能用于匹配模式,对吗?我们可以写(*)bc\1
是的,您可以在比赛中使用\1。我想你在问之前还没有试过?正则表达式可以是(.+)bc\1
>>> s = "aaabcaaa"
>>> re.search(r'(.+)bc\1',s).group(1)
'aaa'
为了解决你的疑问,让我引用
模式中的反向引用允许您指定先前捕获组的内容也必须在字符串中的当前位置找到。例如,如果在当前位置可以找到组1的确切内容,\1
将成功,否则将失败
官方文件还包括一个解决您的问题的程序(略有更改)
确实可以,但你不应该,因为这种模式的复杂性增长非常快。事实上,这将捕获连续和非连续的重复。您应该使用
+
量词。不是*
@casimirithippolyte是的,它甚至在正则表达式howto中提到我们不应该做这样的事情D我应该写一封信来说明这一点吗?@SylvainLeroux是的!对不起,我forgotten@Bhargav更好,但还不太好:仔细观察…;)“非连续”表示两个子字符串之间至少有1个字符。
>>> p = re.compile(r'(\b\w+)bc\1')
>>> p.search(s).group(1)
'aaa'