下面是我在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'组成的字符串,但它没有。
有人能解释一下吗?
由于
答案 0 :(得分:1)
你的前三个字符串完全相同。
>>> '\d' == '\\d' == r'\d'
True
因此,当运行正则表达式引擎时,它们只匹配一个数字。这是正确的,因为'\d'
在'\n'
的方式中没有任何有趣的行为,因此将反斜杠解析为文字是Python解释器响应的唯一合理方式(除非解析错误 - 我我认为这可能是一个更好的主意,但如果不破坏兼容性就无法实现。
相比之下,\n
的不为真:
>>> '\n' == '\\n'
False
>>> '\\n' == r'\n'
True
您的第四个字符串r'\\d'
与'\\\\d'
相同;因此,它只匹配文字字符串\d
应该不足为奇。