如何使用 Regexp 或任何字符串操作方法从字符串中获取所需的数据
How to get the the required data from a string using Regexp or any string manipulation method
我有很多 Json 来自 Instagram API 的回复,其中包含这样的数据:-
"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.
有些回复完全是英文的,有些是其他语言的。这会导致提取数据的麻烦。
怎么做?请帮助
我建议使用 Python 模块来提取 phone 号码和电子邮件。
>>> 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']
这个正则表达式似乎做得不错:
(?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
我有很多 Json 来自 Instagram API 的回复,其中包含这样的数据:-
"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.
有些回复完全是英文的,有些是其他语言的。这会导致提取数据的麻烦。 怎么做?请帮助
我建议使用 Python 模块来提取 phone 号码和电子邮件。
>>> 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']
这个正则表达式似乎做得不错:
(?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