在非连续位置重复子字符串

时间:2015-03-30 18:08:23

标签: python regex

我们如何编写一个RegEx来捕获重复非连续位置的子串? 例如,在aaabcaaa中,aaabc之间重复。

\1只能用于替换而不是匹配模式,对吗?我们可以写(.*)bc\1吗?

2 个答案:

答案 0 :(得分:2)

正则表达式可以是(.+)bc\1

>>> s = "aaabcaaa"
>>> re.search(r'(.+)bc\1',s).group(1)
'aaa'

Regular expression visualization

Debuggex Demo

为了解决您的疑问,让我引用Regex HOWto

  

模式中的反向引用允许您指定还必须在字符串中的当前位置找到先前捕获组的内容。例如,如果可以在当前位置找到组1的确切内容,\1将成功,否则将失败。

官方文档还包括一个解决问题的程序(稍有改动)

>>> p = re.compile(r'(\b\w+)bc\1')
>>> p.search(s).group(1)
'aaa'

答案 1 :(得分:1)

是的,你可以在比赛中使用\ 1。我想你在问之前没试过?