【问题标题】:How to get the the required data from a string using Regexp or any string manipulation method如何使用正则表达式或任何字符串操作方法从字符串中获取所需的数据
【发布时间】:2016-05-03 06:49:21
【问题描述】:

我有许多来自 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 Agents????????????????The most powerful manufacturers,we have thebest quality.????Wechat:13255996580????????Whatsapp:+8618820784535
"bio": "???? เข้าช้อปทุกวันจ้า???? ซื้อกับวี้ได้ของแท้แน่นอนค่า???? แบรนด์อื่นสอบถามได้ค่า???? ดรีวิว@reviewkayasisshopp???? LINE ID : @kux1427k (มี @ ด้วยจ้า)

如何使用 Regexp 或任何已知的字符串操作方法从中获取数据 WhatsApp/Viber Тел: +79858662461 和 Email_id spikydudewonderland@gmail.com

我只想从中获取联系方式,例如 watzapp、line、Wechat、Viber 等和 Email_id。

我的 API 处于循环中,每次执行循环时都会调用,从而带来上述 json 响应。之后,我将数据存储在 excel 中。

有些回复完全是英语,有些回复是其他语言。这给提取数据带来了麻烦。 怎么做?请帮忙

【问题讨论】:

  • 由于我是正则表达式的新手,我尝试了各种字符串操作。但这些适用于只有英文的数据。有时数据使用不同的语言。我被追上了。我希望使用正则表达式或完美的字符串操作得到一些帮助
  • 请发布更多您正在使用的数据示例。仅从一个样本制作正则表达式是很困难的。
  • @Rawing 当然!我已经编辑了我的问题。看看吧!

标签: python regex string instagram-api


【解决方案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

【讨论】:

  • @rohitnair 你不需要。 regex101 上的g 修饰符相当于在python 中使用re.finditer。没有g regex101 只会找到第一个匹配项。
  • @rohitnair 由于^$ 锚点以及它要求电话号码以+ 开头,该模式不起作用。试试这个:(?i)([\w.]+@[\w.]+)|(?:(?:\b|[,/]\s*)(?:whatsapp|viber|wechat))+\b\s*[::]?\s*([()+\d -]+)|\bline(?:\sid)?\s*(?:[::]\s*)?(@\w+)|((?:\+\d+)?[ -]?(?:\(\d+\)[ -]?)?[\d -]{6,}\d)(电话号码在捕获组 4 中)。
  • @rohitnair 那是我的错误,我不熟悉 LINE,所以我假设 ID 需要以 @ 字符开头。我已经更新了我的答案中的正则表达式。还修复了电话号码的一个小问题。
  • 感谢您的回复!但是我找不到你所做的更新!
  • 在演示中吗?或答案顶部的答案中的正则表达式字符串。我尝试了他们两个。在我提到的情况下,它仍然找不到 Line ID
【解决方案2】:

我建议使用 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']

【讨论】:

  • 感谢您的回复!那么你建议的方法只能得到正确的数字。但正如您在我的 JSON 字符串中看到的那样,我想将数据存储为 Whatsapp:24987234 如果我继续只存储数字,我将不知道它是 Whatzapp、Viber、Line 还是任何其他应用程序编号。你能提出任何替代方案吗?
  • 唯一的选择是使用正则表达式。您可能想发布更多示例供我们注意。
  • 除了第一个,我还发布了3个不同语言的。你会要求更多吗?
  • 我添加了一个示例。您可能想查看developers.google.com/edu/python/… 以获取更多示例
  • 感谢您的链接@nEO
猜你喜欢
  • 1970-01-01
  • 2011-12-20
  • 1970-01-01
  • 2023-02-23
  • 2018-07-28
  • 2015-11-04
  • 2021-01-08
  • 2019-05-02
  • 1970-01-01
相关资源
最近更新 更多