如果我想匹配一组字符但仅在两组相同时才匹配,我应该使用哪种正则表达式?
例如,以下应该匹配
Hello John, Goodbye John.
Hello Amy, Goodbye Amy.
但这些不应该匹配
Hello John, Goodbye Amy.
Hello Amy, Goodbye John.
如果我想匹配一组字符但仅在两组相同时才匹配,我应该使用哪种正则表达式?
例如,以下应该匹配
Hello John, Goodbye John.
Hello Amy, Goodbye Amy.
但这些不应该匹配
Hello John, Goodbye Amy.
Hello Amy, Goodbye John.
根据您的正则表达式引擎,您可以在正则表达式中使用反向引用来引用(和匹配)以前匹配的项目:
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. ')
[]
使用反向引用是解决此问题的一种简单方法。这些是对表达式中先前带括号的元素的引用。
例如,仅当反向引用与“John”匹配时,以下内容才会匹配:
/你好(约翰),再见(1美元)/
$1 将确保第二个元素与第一个元素匹配。
更适用于您的问题,以下将允许任何单词字符(名称):
/你好(\w+),再见($1)/gi
干杯,G