【发布时间】:2026-02-26 22:25:01
【问题描述】:
谁能告诉我以下 Python 正则表达式中的“\1”是什么意思?
re.sub(r'(\b[a-z]+) \1', r'\1', 'cat in the the hat')
【问题讨论】:
谁能告诉我以下 Python 正则表达式中的“\1”是什么意思?
re.sub(r'(\b[a-z]+) \1', r'\1', 'cat in the the hat')
【问题讨论】:
\1 等价于re.search(...).group(1),这是正则表达式中的第一个括号分隔的表达式。
有趣的事实也是,Python 和其他编程语言中的正则表达式比required to be by CS theory 慢得多的部分原因。
【讨论】:
第一个\1 表示第一组 - 即第一个括号表达式(\b[a-z]+)
来自docs\number
"匹配相同编号的组的内容。组从1开始编号。例如,(.+)\1匹配'the the'或'55 55',但不匹配'thethe'(注意组后的空格)”
在您的情况下,它正在寻找重复的“单词”(嗯,小写字母块)。
第二个\1 是匹配时使用的替换,因此重复的单词将被单个单词替换。
【讨论】:
\1 是反向引用。
它匹配,括号中匹配的内容,在本例中为 the
你基本上是在说
cat in (' ''the')' the' 帽子
【讨论】:
示例
以下代码使用 Python 正则表达式查找给定字符串中的重复数字
重新导入
结果 = re.search(r'(\d)\1{3}','54222267890' )
打印结果.group()
这给出了输出
2222
【讨论】:
来自python docs for the re module:
\number匹配同号组的内容。组是 从 1 开始编号。例如,
(.+) \1匹配'the the'或'55 55',但不是'thethe'(注意组后的空格)。这 特殊序列只能用于匹配前 99 个组中的一个。 如果 number 的第一位是 0,或者 number 是 3 个八进制数字长, 它不会被解释为组匹配,而是作为字符 八进制数。在字符类的'['和']'内,所有 数字转义被视为字符。
您的示例与文档中的说明基本相同。
【讨论】: