我们如何编写一个RegEx来捕获重复非连续位置的子串?
例如,在aaabcaaa
中,aaa
在bc
之间重复。
\1
只能用于替换而不是匹配模式,对吗?我们可以写(.*)bc\1
吗?
答案 0 :(得分:2)
正则表达式可以是(.+)bc\1
>>> s = "aaabcaaa"
>>> re.search(r'(.+)bc\1',s).group(1)
'aaa'
为了解决您的疑问,让我引用Regex HOWto
模式中的反向引用允许您指定还必须在字符串中的当前位置找到先前捕获组的内容。例如,如果可以在当前位置找到组1的确切内容,
\1
将成功,否则将失败。
官方文档还包括一个解决问题的程序(稍有改动)
>>> p = re.compile(r'(\b\w+)bc\1')
>>> p.search(s).group(1)
'aaa'
答案 1 :(得分:1)
是的,你可以在比赛中使用\ 1。我想你在问之前没试过?