>>> match = re.search(r'\d', 'ca\d')
>>> type(match)
<type 'NoneType'>
根据我的理解,'r'表示不使用黑色粗体进行任何特殊处理,只返回原始字符串。
另外,为什么我得到以下输出:
>>> match = re.search(r'\a', 'ca\a')
>>> match.group()
'\x07'
答案 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个字符)在正则表达式中,匹配数字。