正则表达式-找出电话号码

将下列电话号码匹配出来

(021)88776543      010-55667890     10086     02584453362     0571 66345673      (0931)5763589    

import re 
text = ("(021)88776543     010-55667890    10086     02584453362    0571 66345673    (0931)5763589")
k = re.findall(r'\(0\d{2,3}\)\d{7,8}|0\d{2,3}[- \)]?\d{7,8}|\d+',text)
print(k)
['(021)88776543', '010-55667890', '10086', '02584453362', '0571 66345673']

()在正则表达式里其特殊含义,所以要匹配字符"(",需要用"\("。

“?”表示前面的字符是可有可无的。

“\d”表示数字字符,“+”表示重复匹配前面的字符1到多次。

“\d{7,8}”表示7位或8位的数字字符。

“|”代表或者的意思,使用“|”时,要特别提醒注意的是不同条件之间的顺序。匹配时,会按照从左往右的顺序,一旦匹配成功就停止验证后面的规则。


import re 
text = ("(021)88776543     010-55667890    10086     02584453362    0571 66345673    (0931)5763589")
k = re.findall(r'[\(0]\d{2,3}[- \)]?\d{7,8}|\d+',text)
print(k) 
['(021)88776543', '010-55667890', '10086', '02584453362', '0571 66345673']

两种方式都能够匹配出号码。
括号通常都是成对出现的,第二种方式没有将括号两边关联到一起,假如文本中不仅有号码,还有其他丰富的信息。那用第二种方式会匹配出(0134-4587650或
(078 99999999或065)34343434这样的组合出来。


 

posted @ 2018-04-17 20:58  ywyc  阅读(1096)  评论(0编辑  收藏  举报