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对应第二个,依此类推 - 在替换字符串中同样有效:
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,只不过一个是放在正则表达式里,一个是放在后面的替换字符里

