python 正则表达式 反斜杠(/)的麻烦和陷阱

521湿湿的回忆

521湿湿的回忆

2016-02-19 09:50

下面请跟着图老师小编一起来了解下python 正则表达式 反斜杠(/)的麻烦和陷阱,精心挑选的内容希望大家喜欢,不要忘记点个赞哦!
要匹配字符串中1个反斜杠应该怎么写正则表达式?"\",这样行吗?试试就知道了,re模块抛异常了,因为"\"就是一个反斜杠,对于正则表达式解析器来说,是一个转义字符,但是后面啥也没有,自然就报错了,"\"三个肯定是不行的,试试四个"\\",完美匹配。
代码如下:

import re
re_str_patt = "\\"
reObj = re.compile(re_str_patt)
str_test = "abc\cd\hh"
print reObj.findall(str_test)


输出:['\', '\']

这里要这么理解,首先第一重转换是字符串自身的转义,那么"\\",实际上就是表示两个反斜杠(两个字符),然后传入正则表达式解析器,因为反斜杠依然是转义字符,那么进行第二重转换,两个反斜杠就代表一个反斜杠,所以就能和一个反斜杠进行匹配了,那么匹配连续的两个反斜杠,写正则表达式时就要写8次""了,相当壮观,要匹配/d+(这个在正则表达式里面表示连续1一个以上的数字字符)这个字符串怎么写呢?
代码如下:

import re
re_str_patt = "\\d\+"
print re_str_patt
reObj = re.compile(re_str_patt)
print reObj.findall("\d+")
写成re_str_patt = "\\d+"也行,因为+对于字符串来说,没有转义意义,所以就当成一个反斜杠了。

在python中写正则表达式时用得最多的是raw字符串,原生字符串,什么意思?就是只有一重转换了,没有字符串转换了,只在正则表达式内部进行转换了,这样匹配一个反斜杠的正则表达式可以这样写,re_str_patt = r"\",有人会想,以后写windows的文件路径什么的方便了,呵呵直接 path = r"c:myforderxx" 搞定,是的,这句没有问题,但是如果你写成 path = r"c:myforderxx",直接报错了,为什么?因为反斜杠虽然不作为转义字符了,但是还是对它后面的引号(包括单引号)有影响,使这个引号不被视为字符串的终止,以为它后面还有字符,但是实际没有,因此会报错。其实可以反过来想raw字符串里面要表示引号怎么办呢?,可以发现 path = r"\123"xxx" 是可以的,那用raw字符串岂不是有局限性?不过raw在设计之初就是用来支持正则表达式的,而在正则里面反斜杠是转义字符,所以不可能出现在字符串的末尾的,所以建议不要图方便在其他的地方使用raw。
展开更多 50%)
分享

猜你喜欢

python 正则表达式 反斜杠(/)的麻烦和陷阱

Web开发
python 正则表达式 反斜杠(/)的麻烦和陷阱

正则表达式

Web开发
正则表达式

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

正则表达式口诀 正则表达式学习工具

Web开发
正则表达式口诀 正则表达式学习工具

正则表达式的语法

Web开发
正则表达式的语法

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

正则表达式的应用

Web开发
正则表达式的应用

正则表达式语法

Web开发
正则表达式语法

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

MSSQL 2005 安全设置图文教程

MSSQL 2005 安全设置图文教程

关于JSP的一点疑问小结

关于JSP的一点疑问小结
下拉加载更多内容 ↓