用于匹配连续字符串的正则表达式

时间:2012-08-26 04:59:08

标签: regex

如果我想匹配一组字符但是只有两个组相同才能匹配,我应该使用哪种正则表达式?

例如,以下内容应与

匹配

Hello John, Goodbye John. Hello Amy, Goodbye Amy.

但这些不应该匹配

Hello John, Goodbye Amy. Hello Amy, Goodbye John.

2 个答案:

答案 0 :(得分:3)

根据您的正则表达式引擎,您可以在正则表达式中使用反向引用来引用(和匹配)以前匹配的项目:

Hello (\w+), Goodbye \1.

仅当“Goodbye”之后的文本与第一个匹配(即“Hello”之后的单词)完全匹配时,才会产生匹配。

示例用法(在Python中):

>>> re.findall(r'Hello (\w+), Goodbye \1.', 'Hello John, Goodbye John. Hello Amy, Goodbye Amy. ')
['John', 'Amy']
>>> re.findall(r'Hello (\w+), Goodbye \1.', 'Hello John, Goodbye Amy. Hello Amy, Goodbye John. ')
[]

答案 1 :(得分:1)

使用反向引用是解决此问题的简便方法。这些是对表达式中先前带括号的元素的引用。

例如,如果反向引用与“John”匹配,则以下内容仅匹配:

/你好(约翰),再见($ 1)/

$ 1将确保第二个元素与第一个元素匹配。

更适用于您的问题,下面将允许任何单词字符(名称):

/ hello(\ w +),再见($ 1)/ gi

干杯, ģ