代码改变世界

python正则\\\d、\\\\d、r'\\d'的理解

2018-12-04 20:06  ZpStu  阅读(7733)  评论(0编辑  收藏  举报

这串代码,是正则中当我想寻找字符串‘\d’的时候可以使用的。
c = re.compile('\\d')
s = c.search('\d')
if s:
print(s.group())
这样可以查找到要寻找的值,不过如果你使用:
c = re.compile('\\d')
s = c.search('\d')
if s:
print(s.group())
也是可以寻找到的,为什么会这样?
我查询理解了一下:
因为当我们要寻找的是‘\d’这个字符串时,它在正则中表示的是匹配任何数字,是一个有特殊含义的字符,所以我们在写正则的时候需要转义‘\d’的''是普通的杠,不会和'd'起连锁反应
这时候我们要注意,转义有两个含义,一个是普通字符串的转义,另一个就是正则里面的转义;
比如:

‘\\d’前面两个普通斜杠的转义剩下一个不会转义的斜杠,后面的\d又没什么特别作用,所以直接进入正则内(个人觉得是普通优于正则),这时候两个斜杠转义就剩下一个不会转义的斜杠了。
'\\d'这个同上,前两个普通斜杠的转义剩下一个不会转义的斜杠,不会转义的斜杠与后面不起连锁反应,但是别忘了这是4个,还有两个普通斜杠的,所以进入正则之前就有了两个不会转义的斜杠,所以在进入正则后两个斜杠转义最终成了不能转义的字符斜杠了。

这个也是可以这样写的:
c = re.compile(r'\d')
s = c.search('\d')
if s:
print(s.group())
但是'r'不是表示原生字符串的吗?为什么加上了还要在上里面转义一下;
考虑下上面
两个普通斜杠转义为不能转义的斜杠,在进入正则后才刚恢复能够转义,又被r转移一下,成了不能转义的斜杠了。