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

Regex 用于匹配连续字符串的正则表达式,regex,Regex,如果我想匹配一组字符,但仅当两组字符相同时才匹配,那么应该使用哪种正则表达式 例如,以下内容应匹配 你好,约翰,再见,约翰。 你好,艾米,再见,艾米。 但这些不应该匹配 你好,约翰,再见,艾米。 你好,艾米,再见,约翰。 根据您的正则表达式引擎,您可以使用正则表达式中的反向引用来引用和匹配以前匹配的项: Hello (\w+), Goodbye \1. 仅当再见后的文本与第一个匹配项(即Hello后的单词)完全匹配时,才会生成匹配项 Python中的示例用法: >>>

如果我想匹配一组字符,但仅当两组字符相同时才匹配,那么应该使用哪种正则表达式

例如,以下内容应匹配

你好,约翰,再见,约翰。 你好,艾米,再见,艾米。

但这些不应该匹配

你好,约翰,再见,艾米。 你好,艾米,再见,约翰。

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

Hello (\w+), Goodbye \1.
仅当再见后的文本与第一个匹配项(即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. ')
[]

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

Hello (\w+), Goodbye \1.
仅当再见后的文本与第一个匹配项(即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

干杯,
使用反向引用是解决这个问题的一个简单方法。这些是对表达式中先前用括号括起来的元素的引用

例如,仅当反向引用与John匹配时,以下内容才会匹配:

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

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

更适用于您的问题,以下选项将允许任何单词字符名称:

/您好\w+,再见$1/gi

干杯,
G

是只针对上面要匹配的行,还是字符串的字数会有所不同?您的标准是一行中的名称应该相同吗?是否有一组特定的谓词Hello/debye,或者是否要在任何标点符号后进行检查?它是一大块文本的一部分还是一系列句子的一部分?您需要澄清您的问题。是仅针对您要匹配的上面一行,还是字符串的字数会有所不同?您的标准是名称在一行中应相同吗?是否有一组特定的谓词Hello/debye,或者是否要在任何标点符号后进行检查?它是一大块文本的一部分还是一系列句子的一部分?您需要澄清您的问题。据我所知,这将只是尝试匹配$end-of-line/string和1,我不知道有任何正则表达式风格会像这样进行反向引用。更换时有效,但在比赛期间无效。另外,欢迎使用堆栈溢出。我认为这是Perl。perl-e'print Hello John,再见John=~/Hello John,再见$1/'@nneonneo-我对perl了解不多,但是:1。没有提到它。2.看起来$1试图将当前$1的值插入到模式中,很像$varname。创建正则表达式时,它不应为空,因此它与/hello\w+,bye/相同。快速测试:,这里是另一个有趣的,我们捕获了1美元:你说得对。我做了一个仓促的假设。那么,问题仍然是:这在任何语言中都有效吗?据我所知,这将只是尝试匹配$end of line/string和1,我不知道有任何正则表达式风格会像那样进行反向引用。更换时有效,但在比赛期间无效。另外,欢迎使用堆栈溢出。我认为这是Perl。perl-e'print Hello John,再见John=~/Hello John,再见$1/'@nneonneo-我对perl了解不多,但是:1。没有提到它。2.看起来$1试图将当前$1的值插入到模式中,很像$varname。创建正则表达式时,它不应为空,因此它与/hello\w+,bye/相同。快速测试:,这里是另一个有趣的,我们捕获了1美元:你说得对。我做了一个仓促的假设。因此,问题依然存在:这在任何语言中都有效吗?