本文使用了python3中的re模块
- 关于\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)
可以看到,此时\w并非简单的等价于[A-Za-z0-9_],
同时还匹配了中文字符。这是因为\w在Unicode模式下会
匹配中文字符,phthon3中就是会这样。如果不需要这样的话,
可以写成[A-Za-z0-9_]就没问题
- 再看看\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)
rslt = re.findall(r'\W','aka ')
print(rslt)
可以看到,\W还匹配了特殊字符,甚至还匹配了空格,它此处
也不是简单的等价于[^a-zA-Z0-9_],中文字符也无法匹配。
- 再看看\b的使用,大部分教程都说\b匹配一个单词边界,即匹配单词与空格的位置。如\baka匹配字符"daka",由于字母d的存在,则无法匹配。
rslt3 = re.findall(r'\baka',"daka")
print(rslt3)
rslt4 = re.findall(r'\baka',"dida aka")
print(rslt4)
再看下面一行代码
rslt5 = re.findall(r'\baka',"akatk")
print(rslt5)
我们可以看到,此时也\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)
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]以及中文字符的位置。