Python中正则表达式里的“\1”如何正确理解?

官方手册中如下:

>>> import re
>>> re.findall(r'\bf[a-z]*', 'which foot or hand fell fastest')
['foot', 'fell', 'fastest']
>>> re.sub(r'(\b[a-z]+) \1', r'\1', 'cat in the the hat')
'cat in the hat'

我知道第一个中的\b是单词边界,那么第二个中的\1 具体是什么意思,向后重复匹配的意思吗?


Python中正则表达式里的“\1”如何正确理解?

10 回复

就是重复匹配的$1 内容????


在Python正则表达式里,\1 是反向引用(backreference),它匹配前面第一个捕获组(capture group)捕获到的完全相同的内容。

举个例子就明白了:

import re

# 匹配重复的单词
pattern = r'(\w+)\s+\1'  # \1 引用前面(\w+)捕获的内容
text = "hello hello world"
match = re.search(pattern, text)
if match:
    print(f"找到重复: {match.group()}")  # 输出: hello hello

关键点:

  1. \1 引用的是匹配到的文本,不是模式本身
  2. 编号对应括号顺序:\1 对应第一个()\2对应第二个,依此类推
  3. 在替换字符串中同样有效:re.sub(r'(\d+)-(\d+)', r'\2-\1', '123-456') 返回 456-123

常见误区:

  • 在普通字符串中要写\\1(因为\是转义符),所以建议用原始字符串r'\1'
  • 只引用已成功匹配的组,如果第1组没匹配到,\1会失败

简单说:把它当成“前面那个括号抓到啥,我就要一模一样的”。

(如果是要匹配数字1,应该用[1]1,而不是\1

这里是匹配第一个捕获组

正则表达式反向引用 我理解的是\1 可以代表前面括号匹配到的内容




正解啊,确实如此,匹配第一个捕获组,谢谢。

\1 应该是引用第一个分组(\b[a-z]+)

这个再 regex 里面叫 capture group,更多细节 Google “capture group regex”

就是$1,只不过一个是放在正则表达式里,一个是放在后面的替换字符里

回到顶部