将下列电话号码匹配出来
(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这样的组合出来。