2015-04-15 30 views
2
>>> match = re.search(r'\d', 'ca\d') 
>>> type(match) 
<type 'NoneType'> 

从我的理解'r'表示不要用黑色边线做任何特殊处理,只返回原始字符串。为什么这个python regex返回不匹配?

而且,为什么我得到下面的输出:

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

回答

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的raw字符串表示正则表达式 模式;在 中,不以任何特殊方式处理反斜杠,字符串文字前缀为'r'。因此r“\ n”是包含'\'和'n'的双字符字符串 ,而“\ n”是包含换行符的单字符字符串 。通常模式将使用这种原始字符串表示法以Python 代码表示。

这并不意味着它不会处理斜线无论如何,这只是让您使用一个斜线而不是一个双斜线。正则表达式中的斜杠在d之前有意义。

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

1

除了stribizhev的评论,可能'r'(原始字符串指标)让你感到困惑。这用于避免转义。转义是一种允许在代码编写特殊(不可打印)字符等形式: TAB - ASCII 9 - “\ t” 的 CR - ASCII 13 - 为 “\ r”(Unix的回车)

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

相关问题