我对python和regex非常陌生,我正在尝试使用python从文本文件中提取电话号码。数字可以采用0321-2695224或03212695224的格式。
number_list = re.findall("03[0-6][0-9][-]?[0-9]{7}",numbers)
这应该只返回11位数字,但是此表达式也将返回11位以上的数字。我的文件中有一个数字0344446568956565,该表达式返回03444465689。我要我的表达式要做的是完全忽略11位以上的数字。
答案 0 :(得分:3)
您可以使用此正则表达式,该正则表达式将仅匹配11个数字,其中任意数字之间可以有连字符-
,
(?<!\d)\d(?:-?\d){10}(?!\d)
说明:
(?<!\d)
-数字前不能有数字\d
-开始与数字匹配(?:-?\d){10}
-进一步匹配十位数字,该数字前可能有可选的连字符(?!\d)
-匹配的数字后不能有数字,以避免匹配大于11位的数字Python代码,
import re
s = 'sometext 0321-2695224 something else 03212695224 something else further 0344446568956565'
print(re.findall(r'(?<!\d)\d(?:-?\d){10}(?!\d)', s))
仅打印您想要的号码,
['0321-2695224', '03212695224']