正则表达式中\b与\B的区别
- \b匹配单词边界,\B匹配非单词边界。“单词”所指的为Unidcode 的字母数字或下横线字符。下面通过实例来解释二者的区别:
import re
s = " ever "
print(re.findall(r'\bever\b', s))
此时的输出结果是:[‘ever’,证明此时空格在本次匹配中并不影响,正则成功匹配出字符串s中的ever假如说我们在后面在添加一些符号呢?下面我们测试一下:
import re
s = " ever !"
print(re.findall(r'\bever\b', s))
此时的输出结果仍然是:[‘ever’],证明标点符号对本次匹配是不影响的,接着我们在测试一下在后面添加一下英文字符再看一下:
import re
s = " ever !mm"
print(re.findall(r'\bever\b', s))
这个时候的输出结果还是[‘ever’],那么我们在测试一下在要匹配的字符串ever所在的源字符串周围添加英文字符看一下:
import re
s = "mever "
print(re.findall(r'\bever', s))
此时的结果为[],为什么这次的结果与上面三次结果不同呢?接着通过最后一个实验来告诉你们问什么。
import re
s = "mever "
print(re.findall(r'\Bever', s))
此时你会发现正则匹配又得到了1,2,3的相同结果,为什么呢,这就是\b与\B的区别所在。
结论:\b匹配时其要匹配的字符串如例子中的ever在源字符串s中的位置左右不能出现英文字母,相反\B的周围必须出现英文字母。