无法使用Python和Regex正确解析电话号码

时间:2019-07-17 19:26:59

标签: python regex

我需要从社交媒体帖子中提取电话号码,并以已发布的格式准确打印它们。 这是我正在使用的代码:

response = json.dumps(res)
data = json.loads(response)

fulltext = []

for row in data['hits']['hits']:
fulltext.append(row['_source']['text'])

for text in fulltext:

     numbers = re.findall(r'((?:\+|00)[17](?: |\-)?|(?:\+|00)[1-9]\d{0,2}(?: |\-)?|(?:\+|00)1\-\d{3}(?: |\-)?)?(0\d|\([0-9]{3}\)|[1-9]{0,3})(?:((?: |\-)[0-9]{2}){4}|((?:[0-9]{2}){4})|((?: |\-)[0-9]{3}(?: |\-)[0-9]{4})|([0-9]{7}))', text)

     if numbers:
      for contact in numbers:
       print contact

问题在于数字是这样打印的:

(u'', u'09', u'', u'17546950', u'', u'')
(u'', u'09', u'', u'17546950', u'', u'')
(u'', u'09', u'', u'11807149', u'', u'')
(u'', u'09', u'', u'90393514', u'', u'')
(u'', u'09', u'', u'11807149', u'', u'')
(u'', u'09', u'', u'11807149', u'', u'')
(u'', u'09', u'', u'11807149', u'', u'')
(u'+989', u'16', u'', u'', u'', u'8897906')

消息中的数字以多种不同的方式显示,例如:

    +989168897906;
    989-168-897-906;
    +39 3363378929

唯一的限制是想象力,因为它们是人类输入的!但是我发现上面的正则表达式是匹配更多数字的那个。当然,我认为可以接受的是未检测到一些。

示例:

{"text": "خارج شده به صورت تضمینی ?\n\n\n⭕ ارتباط با ما و مشاوره ?\n? ?\n\n?+989168897906 ?\n\n\n⭕ کانال ما ?\n? ?"}

相反,我需要完全按照已过帐的方式打印数字。 我的代码有什么问题?

0 个答案:

没有答案