如果我想匹配一组字符但是只有两个组相同才能匹配,我应该使用哪种正则表达式?
例如,以下内容应与
匹配
Hello John, Goodbye John.
Hello Amy, Goodbye Amy.
但这些不应该匹配
Hello John, Goodbye Amy.
Hello Amy, Goodbye John.
答案 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
干杯, ģ