【问题标题】:python regular expression "\1"python正则表达式“\1”
【发布时间】:2026-02-26 22:25:01
【问题描述】:

谁能告诉我以下 Python 正则表达式中的“\1”是什么意思?

re.sub(r'(\b[a-z]+) \1', r'\1', 'cat in the the hat')

【问题讨论】:

    标签: python regex


    【解决方案1】:

    \1 等价于re.search(...).group(1),这是正则表达式中的第一个括号分隔的表达式。

    有趣的事实也是,Python 和其他编程语言中的正则表达式比required to be by CS theory 慢得多的部分原因。

    【讨论】:

      【解决方案2】:

      第一个\1 表示第一组 - 即第一个括号表达式(\b[a-z]+)

      来自docs\number

      "匹配相同编号的组的内容。组从1开始编号。例如,(.+)\1匹配'the the'或'55 55',但不匹配'thethe'(注意组后的空格)”

      在您的情况下,它正在寻找重复的“单词”(嗯,小写字母块)。

      第二个\1 是匹配时使用的替换,因此重复的单词将被单个单词替换。

      【讨论】:

        【解决方案3】:

        \1 是反向引用。 它匹配,括号中匹配的内容,在本例中为 the

        你基本上是在说

        • 匹配单词开头的空字符串(\b)
        • 匹配从 a 到 z 的字母字符一次或多次
        • 再次匹配括号中的词

        cat in (' ''the')' the' 帽子

        【讨论】:

          【解决方案4】:

          示例
          以下代码使用 Python 正则表达式查找给定字符串中的重复数字

          重新导入
          结果 = re.search(r'(\d)\1{3}','54222267890' )
          打印结果.group()
          这给出了输出

          2222

          【讨论】:

            【解决方案5】:

            来自python docs for the re module

            \number

            匹配同号组的内容。组是 从 1 开始编号。例如,(.+) \1 匹配 'the the''55 55',但不是'thethe'(注意组后的空格)。这 特殊序列只能用于匹配前 99 个组中的一个。 如果 number 的第一位是 0,或者 number 是 3 个八进制数字长, 它不会被解释为组匹配,而是作为字符 八进制数。在字符类的'['']' 内,所有 数字转义被视为字符。

            您的示例与文档中的说明基本相同。

            【讨论】: