对python的正则表达式一点理解

刚开始入门,很多东西不明白。把这些可能很傻瓜式的不明白写下来。

问题1:在写pattern时为什么字符串前面要加个r,其实也就是这个问题,那不加r是不是也可以。就是不知道加r有什么作用。在python有一个拥有全部功能的正则表达式对象,函数为re.compile(pattern, flags),我寻求方便,就直接用一个简体版。所用的代码我只用了一个函数re.match(pattern, string, flags)。参数pattern就是你要写正则表达式,如果匹配成功,就返回一个__Match,否则返回一个None。我在官方文档时看写的那些示例,有时会用r有时又不用,好吧,我终于有点开始顿悟了。第二个参数string就是你要匹配的字符串,第三个参数flags用来控制正则表达式匹配的方式。flags这个值是re模块中定义的常量,你可以用位运算符“|”同时设置几个标志。

好的现在我开始我的疑惑,对于高手就一笑置之吧!写到这里,我算是弄明白我的疑惑在哪里了,c的转义字符与正则表达式中的特殊匹配字符,这应该是我疑惑的地方。这可能就是好奇为什么需要在字符串前面加上r的地方。

import re
text = "hell\d"
m = re.match("^[a-z]{4}\d$", text)
if m:
    print(m.group(0))
else:
    print("not match")

这段代码上匹配不会成功。首先,pattern部分没有加r,那么就不是raw字符串,有后斜划线,在c中转义字符是以后斜划线开始的,后面接一个d字符,'\d'没有相应的转义,故pattern部分传给正则表达式引擎的也是"^[a-z]{4}\d"这个字符串,而匹配的字符串是"hell\d",相应的\d也是没有转义,说明这是有5个字符,而pattern匹配的是前4个字符是字母,以一个数字结尾,不满足。

import re
text = "a\3"
m = re.match("a\\d", text)
if m:
    print(m.group(0))
else:
    print("not match")

这个也是不会匹配的,pattern部分会按c转义字符,最后pattern传给正则表达式引擎的是r"a\d",那匹配成功的字符串应该是"a3",而要匹配的字符串是"a\3",当然不会成功啊。好吧,我估计我明白pattern部分为什么要用raw字符串了。不知道我的想法是否正确。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值