python正则表达式“\ 1”

时间:2013-12-27 14:03:42

标签: python regex

任何人都可以告诉我在Python中的以下正则表达式中“\ 1”是什么意思吗?

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

谢谢!

5 个答案:

答案 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

你基本上是在说

  • 匹配单词开头的空字符串(\ b)
  • 匹配a-z中的字母字符,一次或多次
  • 再次使用括号中的术语

(''''')'''帽子

中的猫

答案 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