正则表达式里\b和\B,Python实例

书上讲的很储蓄,开始没有弄太明白。如果不弄明白,用的时候会非常苦恼。基于此,除了多多理解书本内容,又做了大量实践,总算有点明白了,在此记录一下。一来自己方便查看,二来希望看到此文章的同仁,也能多一点对\b\B的理解。

\b,\B是单词边界,不匹配任何实际字符,所以是看不到的;\B是\b的非(补)。

\b:表示字母数字与非字母数字的边界,     非字母数字与字母数字的边界。

\B:表示字母数字与(非非)字母数字的边界,非字母数字与非字母数字的边界。

看下面实例:

import re #首先加载re模块。
re.split('123\\b','==123!! abc123. 123. 123abc. 123') #结果如下:


箭头所指的地方就是分隔边界,都是数字与非字母数字的边界;同时看到'123abc'没有被分隔,符合\b的意思。

re.split('123\\b','==123!! abc123. 123\tabc 123')


箭头所指的地方就是分隔边界,'123\tabc'被分隔,这里的'\t'是tab键(非字母数字)。

re.split('\\b123\\b','123 ==123!! abc123.123.123abc.123')


可以看到是四对分隔边界,分别对应123前后的\b。

re.split('\\b123=\\b','==123!! abc123,123,123=abc,123')


可以看到只有一对(一处)分隔边界,前面箭头表示非字母数字与数字的边界,后面箭头表示非字母数字与字母的边界。

re.split('\\b123a\\b','==123!! abc123,123,123a\nbc,123')


可以看到只有一对(一处)分隔边界,前面箭头表示非字母数字与数字的边界,后面箭头表示字母与非字母数字的边界。

re.split('\\b123=\\b','==123!! abc123,123,123==abc,123')


可以看到字符串没有被分隔,是因为箭头处的边界表示非字母数字与非字母数字的边界,不是\b的意思。

下面说一下\B。

re.split(r'pyc\B','1pycthon py5 2pyc342 pyc1py2py4 pyp3 3pyc# pyc')


可以看到有三个分隔边界,都是字母与字母数字的边界,'3pyc#','pyc'没有被分隔,是因为字母与非字母数字的边界。

re.split(r'py=\B','1py=cthon py5 2py=342 py==1py2py4 pyp3 3py= pyabc')


箭头处是分隔边界,表示非字母数字与非字母数字的边界,'1py=cthon','2py=342'没有被分隔,是因为非字母数字与字母数字的边界。

把上面介绍\b时没有被分隔的例子,修改一下:

re.split('\\b123=\\B','==123!! abc123,123,123==abc,123')


有一对(一处)分隔边界,前面箭头处表示非字母数字与数字的边界,后面箭头处表示非字母数字与非字母数字的边界。都符合\b,\B的意思。

到这里希望你能对\b,\B有一点更深入的理解。

 


---------------------
作者:徐三少北
来源:CSDN
原文:https://blog.csdn.net/uvyoaa/article/details/80854459
版权声明:本文为博主原创文章,转载请附上博文链接!

posted @ 2019-04-02 09:48  mxp_neu  阅读(1292)  评论(0)    收藏  举报