我有很多来自Instagram API的Json响应,其中包含如下数据: -
"bio": "5-yr online store Real pictures Mirror Quality 1:1 Whatsapp/Viber +861776345378 spikydudewonderland@gmail.com ✈️✈️Worldwide Shipping",
更多例子: -
"bio": "Девочки это наша новая страничка.Только копии Lux, искателям дешевых подделок не беспокоить. По всем вопросам viber,whatsapp +79128743333 Лианна"
"bio": "Recruitment AgentsThe most powerful manufacturers,we have thebest quality.Wechat:13255996580Whatsapp:+8618820784535
"bio": " เข้าช้อปทุกวันจ้า ซื้อกับวี้ได้ของแท้แน่นอนค่า แบรนด์อื่นสอบถามได้ค่า ดรีวิว@reviewkayasisshopp LINE ID : @kux1427k (มี @ ด้วยจ้า)
如何使用Regexp或任何已知的字符串操作方法从中获取数据WhatsApp/Viber Тел: +79858662461
和Email_id spikydudewonderland@gmail.com
。
我想从中获得与watzapp,line,Wechat,Viber等和Email_id的联系方式。
我的API处于循环中并且每次循环执行时调用它会带来上面的json响应。之后,我将数据存储在excel中。
有些回复完全是英文的,有些则是其他语言。这导致提取数据的麻烦。 怎么做?请帮忙
答案 0 :(得分:1)
这个正则表达式似乎做了一个可接受的工作:
(?i)([\w.]+@[\w.]+)|(?:(?:\b|[,/]\s*)(?:whatsapp|viber|wechat))+\b\s*[::]?\s*([()+\d -]+\d)|\bline(?:\sid)?\s*(?:[::]\s*)?@?(\w+)|((?:\+\d+[ -]?)?(?:\(\d+\)[ -]?)?\d[\d -]{5,}\d)
这会捕获捕获组1中的电子邮件,组2中的Whatsapp / Viber / Wechat号码以及组3中的线路ID。
用法示例:
import re
text= '5-yr online store Real pictures Mirror Quality 1:1 Whatsapp/Viber +861776345378 spikydudewonderland@gmail.com ✈️✈️Worldwide Shipping'
pattern= r'(?i)([\w.]+@[\w.]+)|(?:(?:\b|[,/]\s*)(?:whatsapp|viber|wechat))+\b\s*[::]?\s*(\+?\d+)|\bline(?:\sid)?\s*(?:[::]\s*)?(@\w+)'
for mobj in re.finditer(pattern, text):
if mobj.group(1):
print 'email:', mobj.group(1)
elif mobj.group(2):
t= mobj.group().lower()
if 'whatsapp' in t:
print 'whatsapp:', mobj.group(2)
if 'viber' in t:
print 'viber:', mobj.group(2)
if 'wechat' in t:
print 'wechat:', mobj.group(2)
elif mobj.group(3):
print 'line:', mobj.group(3)
正则表达式解释:
(?i) case insensitive
([\w.]+@[\w.]+) something that looks like an email
| or
(?: a list of...
(?:\b|[,/]\s*)
(?:whatsapp|viber|wechat) ...whatsapp/viber/wechat
)+\b\s*
[::]?\s* possibly followed by a colon
(\+?\d+) and of course the number
| or
\bline(?:\sid)?\s*(?:[::]\s*)?(@\w+) something that looks like a line id
答案 1 :(得分:0)
我建议使用Python模块来提取电话号码和电子邮件。
>>> import phonenumbers
>>> x = phonenumbers.parse("+442083661177", None)
>>> print x
Country Code: 44 National Number: 2083661177 Leading Zero: False
您可以从此处安装模块。 https://github.com/daviddrysdale/python-phonenumbers
对于电子邮件提取,您可以使用以下模块https://pypi.python.org/pypi/email_extractor
如果您使用特殊字符,则可以使用正则表达式
>>> s.lower()
'"bio": "recruitment agents the most powerful manufacturers,we have thebest quality. wechat:13255996580 whatsapp:+8618820784535'
>> re.findall(r'whatsapp|viber|wechat\s*.*\d+', s.lower())
['wechat:13255996580 whatsapp:+8618820784535']