如何使用Regexp或任何字符串操作方法从字符串中获取所需的数据

时间:2016-05-03 06:49:22

标签: python regex string instagram-api

我有很多来自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中。

有些回复完全是英文的,有些则是其他语言。这导致提取数据的麻烦。 怎么做?请帮忙

2 个答案:

答案 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)

Demo.

这会捕获捕获组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']