为什么这个python正则表达式没有回复?

时间:2015-04-15 07:48:40

标签: regex python-2.7

>>> match = re.search(r'\d', 'ca\d')
>>> type(match) 
<type 'NoneType'>

根据我的理解,'r'表示不使用黑色粗体进行任何特殊处理,只返回原始字符串。

另外,为什么我得到以下输出:

>>> match = re.search(r'\a', 'ca\a')
>>> match.group()
'\x07'

2 个答案:

答案 0 :(得分:4)

因为您的输入字符串没有数字。 \d表示capture a digit

如果您想捕获文字\d,则应使用\\d模式。

请参阅example here

这个程序

import re
p = re.compile(ur'\\d')
test_str = u"ca\d"
print re.search(p, test_str).group(0)

将输出\d

至于r'',请查看此re documentation

  

解决方案是使用Python的常规字符串表示法   表达模式;反斜杠不以任何特殊方式处理   带有&#39; r&#39;前缀的字符串文字。所以r&#34; \ n&#34;是一个两个字符的字符串   包含&#39; \&#39;和&#39; n&#39;,而&#34; \ n&#34;是一个单字符串   包含换行符。通常模式将用Python表示   使用此原始字符串表示法的代码。

这并不意味着它不会以任何方式处理斜杠,这只是让你使用一个斜杠而不是一个斜杠。斜杠在正则表达式中d之前有意义。

至于\a,没有这样的正则表达式元字符,因此\被视为文字。

答案 1 :(得分:1)

除了stribizhev的评论,可能还有&#39; r&#39; (原始字符串指示符)让你感到困惑。这用于避免逃避。转义是一种允许在代码中编写特殊(不可打印)字符的形式,例如: TAB - ASCII 9 - &#34; \ t&#34; CR - ASCII 13 - &#34; \ r&#34; (Unix Enter)

但是没有特殊的字符包含代码&#34; \ d&#34;,所以在它前面放置一个r没有区别,所以字符串仍然是&#34; \ d& #34; (2个字符)在正则表达式中,匹配数字。