Python 正则:前后界定和前后非界定

在用正则去匹配识别手机号、QQ、微信号的时候,往往由于输入的文本可能非常的另类,比如,没有标点和隔断,这时`^`和`$`就用不上了。

不用其实也可以识别的,但是有个问题,手机后是11位数字,QQ是5~11或者更多数字,有可能从手机号中破坏性的匹配到QQ号。当然,此一类问题前后界定和前后非界定都适用。

前后界定和前后非界定中的界定的意思是:边界字符限制必须是或必须不能是的意思。

为了说明问题,假设QQ是最长10位,最少5位的数字:

1 >>> import re
2 >>> cont = "小强的手机号是15877966552"
3 >>> print re.findall(r"[1-9]\d{4,9}",cont)
4 ['1587796655']

结果,正则从手机号中匹配到了结果,这是不对滴。有了前后非界定就好了:

1 >>> print re.findall(r"(?<!\d)[1-9]\d{4,9}(?!\d)",cont)
2 []

再例如,文本中出现了成对的符号或字符,但实际上需要的是其内的部分,就用到了前后界定了:

1 >>> cont = "str = '小强的手机号是15877966552'"
2 >>> print re.findall(r"(?<=\').*(?=\')",cont)
3 ['\xe5\xb0\x8f\xe5\xbc\xba\xe7\x9a\x84\xe6\x89\x8b\xe6\x9c\xba\xe5\x8f\xb7\xe6\x98\xaf15877966552']

因此,`^`和`$`是包含某字符的匹配,前后界定和前后非界定是不包含某字符的匹配,明白后以便见方抓药。

猜你喜欢

转载自www.cnblogs.com/yamboo/p/10772590.html