>>> match = re.search(r'\d', 'ca\d')
>>> type(match)
<type 'NoneType'>
从我的理解'r'表示不要用黑色边线做任何特殊处理,只返回原始字符串。为什么这个python regex返回不匹配?
而且,为什么我得到下面的输出:
>>> match = re.search(r'\a', 'ca\a')
>>> match.group()
'\x07'
>>> match = re.search(r'\d', 'ca\d')
>>> type(match)
<type 'NoneType'>
从我的理解'r'表示不要用黑色边线做任何特殊处理,只返回原始字符串。为什么这个python regex返回不匹配?
而且,为什么我得到下面的输出:
>>> match = re.search(r'\a', 'ca\a')
>>> match.group()
'\x07'
因为你的输入字符串没有数字。 \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
,没有这样的正则表达式元字符,所以\
被视为文字。
除了stribizhev的评论,可能'r'(原始字符串指标)让你感到困惑。这用于避免转义。转义是一种允许在代码编写特殊(不可打印)字符等形式: TAB - ASCII 9 - “\ t” 的 CR - ASCII 13 - 为 “\ r”(Unix的回车)
但有没有特殊字符代码为“\ d”,所以在它前面放置一个r没有区别,所以字符串仍然是“\ d”(2个字符),在正则表达式中,匹配一个数字。