python中正则表达式中的原始字符串('\ r')不起作用?

时间:2015-11-16 23:16:10

标签: python regex

下面是我在python中的原始字符串('\ r')测试。

import re

a = re.compile('\d')
b = re.compile('\\d')
c = re.compile(r'\d')
d = re.compile(r'\\d')


print a.search("1")   # (O)
print a.search("\d")
print a.search("\1")

print b.search("1")   # (O)
print b.search("\d")
print b.search("\1")

print c.search("1")   # (O)
print c.search("\d")
print c.search("\1")

print d.search("1")   
print d.search("\d")  # (O)
print d.search("\1")

但似乎原始字符串不起作用。

例如,正则表达式'b'应该捕获由“反斜杠+字母d”组成的表达式,但它只捕获数字'1'....

根据'r'的含义,正则表达式'c'也应该捕获由'反斜杠+字母d'组成的字符串,但它没有。

有人能解释一下吗?

由于

1 个答案:

答案 0 :(得分:1)

你的前三个字符串完全相同。

>>> '\d' == '\\d' == r'\d'
True

因此,当运行正则表达式引擎时,它们只匹配一个数字。这是正确的,因为'\d''\n'的方式中没有任何有趣的行为,因此将反斜杠解析为文字是Python解释器响应的唯一合理方式(除非解析错误 - 我我认为这可能是一个更好的主意,但如果不破坏兼容性就无法实现。

相比之下,\n为真:

>>> '\n' == '\\n'
False
>>> '\\n' == r'\n'
True

您的第四个字符串r'\\d''\\\\d'相同;因此,它只匹配文字字符串\d应该不足为奇。