正则表达式可从文本文件中捕获不需要的数字

时间:2019-05-18 18:34:36

标签: regex python-3.x regex-lookarounds regex-group

我对python和regex非常陌生,我正在尝试使用python从文本文件中提取电话号码。数字可以采用0321-2695224或03212695224的格式。

number_list = re.findall("03[0-6][0-9][-]?[0-9]{7}",numbers)

这应该只返回11位数字,但是此表达式也将返回11位以上的数字。我的文件中有一个数字0344446568956565,该表达式返回03444465689。我要我的表达式要做的是完全忽略11位以上的数字。

1 个答案:

答案 0 :(得分:3)

您可以使用此正则表达式,该正则表达式将仅匹配11个数字,其中任意数字之间可以有连字符-

(?<!\d)\d(?:-?\d){10}(?!\d)

说明:

  • (?<!\d)-数字前不能有数字
  • \d-开始与数字匹配
  • (?:-?\d){10}-进一步匹配十位数字,该数字前可能有可选的连字符
  • (?!\d)-匹配的数字后不能有数字,以避免匹配大于11位的数字

Regex Demo

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']