我需要从社交媒体帖子中提取电话号码,并以已发布的格式准确打印它们。 这是我正在使用的代码:
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? ?"}
相反,我需要完全按照已过帐的方式打印数字。 我的代码有什么问题?