任何人都可以告诉我在Python中的以下正则表达式中“\ 1”是什么意思吗?
re.sub(r'(\b[a-z]+) \1', r'\1', 'cat in the the hat')
谢谢!
答案 0 :(得分:16)
\1
相当于re.search(...).group(1)
,这是正则表达式中第一个括号分隔的表达式。
同样有趣的是,正常表达式在Python和其他编程语言中明显慢于required to be by CS theory的部分原因。
答案 1 :(得分:15)
第一个\1
表示第一个组 - 即第一个括号内的表达式(\b[a-z]+)
来自docs \number
“匹配相同数字组的内容。组从1开始编号。例如,(。+)\ 1匹配''或'55 55',但不匹配'thethe'(注意小组之后的空间)“
在你的情况下,它正在寻找一个重复的“单词”(好吧,小写字母块)。
第二个\1
是匹配时使用的替换,因此重复的单词将被单个单词替换。
答案 2 :(得分:7)
\1
是一个反向引用。
它匹配括号中匹配的内容,在本例中为the
你基本上是在说
在(''''')'''帽子
中的猫答案 3 :(得分:2)
来自python docs for the re module:
\number
匹配相同编号的组的内容。团体是 从1开始编号。例如,
(.+) \1
匹配'the the'
或'55 55'
,但不是'thethe'
(注意组后的空格)。这个 特殊序列只能用于匹配前99个组中的一个。 如果数字的第一个数字是0,或者数字是3个八进制数字, 它不会被解释为组匹配,而是作为角色 八进制数值。在角色类的'['
和']'
内,全部 数字转义被视为字符。
您的示例与文档中的说明基本相同。
答案 4 :(得分:0)
示例 以下代码使用Python正则表达式查找给定字符串中的重复数字
导入 结果= re.search(r'(\ d)\ 1 {3}','54222267890') 打印result.group() 这给出了输出
2222