关于python3中正则表达式几个不常见的细节

本文使用了python3中的re模块

  1. 关于\w的使用,先看下面代码
import re
pat = re.compile(r'\d[\w\d]+@qq\.com')
strs = "我的邮箱有243901akt@qq.com,186797哈哈ak@qq.com"
rslt = pat.findall(strs)
print(rslt)
# ['243901akt@qq.com', '186797哈哈ak@qq.com']
 可以看到,此时\w并非简单的等价于[A-Za-z0-9_],
 同时还匹配了中文字符。这是因为\w在Unicode模式下会
 匹配中文字符,phthon3中就是会这样。如果不需要这样的话,
 可以写成[A-Za-z0-9_]就没问题
  1. 再看看\W的使用,再看看下面的代码
pat = re.compile(r'\d[\W\d]+@qq\.com')
strs = "我的邮箱有243901&#@qq.com,186797哈哈@qq.com,243901akk@qq.com"
rslt = pat.findall(strs)
print(rslt)
# ['243901&#@qq.com']
rslt = re.findall(r'\W','aka ')
print(rslt)
# [' ']
可以看到,\W还匹配了特殊字符,甚至还匹配了空格,它此处
也不是简单的等价于[^a-zA-Z0-9_],中文字符也无法匹配。
  1. 再看看\b的使用,大部分教程都说\b匹配一个单词边界,即匹配单词与空格的位置。如\baka匹配字符"daka",由于字母d的存在,则无法匹配。
rslt3 = re.findall(r'\baka',"daka")
print(rslt3)
rslt4 = re.findall(r'\baka',"dida aka")
print(rslt4)
# []
# ['aka']
再看下面一行代码
rslt5 = re.findall(r'\baka',"akatk")
print(rslt5)
# ['aka']
我们可以看到,此时也\b也可以匹配字符串的开始位置,
再看下面两行代码你会发现,\b还可以匹配特殊字符的位置
rslt1 = re.findall(r'\baka\b','didida#aka&,tt aka rr')
print(rslt1)
rslt2 = re.findall(r'\baka\b','didida aka')
print(rslt2)
# ['aka', 'aka']
# ['aka']
rslt6 = re.findall(r'\baka','哈哈aka ')
print(rslt6)
# []
我们是不是可以这样认为,\b在python3的re模块中会
匹配出不在\w而在\W中的字符。
总结一下,\w会匹配出[a-zA-Z0-9]以及一个中文字符。
\W会匹配特殊字符例如#&,也会匹配空格
\b能匹配空格、特殊字符、字符串开始和结尾的位置
不用说,\B能匹配出[0-9a-zA-Z]以及中文字符的位置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值