【问题标题】:How to fix issues (like spaces) in-between the email address如何解决电子邮件地址之间的问题(如空格)
【发布时间】:2021-05-30 08:46:39
【问题描述】:

所以我最近尝试使用 OCR 从文档中提取文本。有时,OCR 在字符之间添加一个“空格”。当它是电子邮件地址时,这会成为一个问题。

例如, 电子邮件:adil.idris2019@gmail.com ------> adil.idris2019@gmail.com

我正在尝试使用正则表达式来解决这个问题。

import re
txt = "wldeub 777-29378-88 @@ Email:adil.idris 2019@gmail.com dfhdu fdlfkos"
txt1 = "Email:michael wobbly@gmail.com 777-123-0000"
txt2 = "Email: john_jebrasky@ gmail.com TX, USA"
txt3 = "john_jebrasky @gmail.com TX, USA"
txt4 = "I am proficient in python. geekcoder 12@gmail.com TX, USA"

out = re.search("Email\:?.+com",txt)
re.sub("Email\:","",re.sub(" ","",out.group(0)))

很遗憾,这只是硬编码修复。注意:在某些情况下,Email: 一词可能不会作为电子邮件的前缀出现。 如果没有电子邮件,或者文本不符合任何标准模式怎么办??

理想输出:“adil.idris2019@gmail.com”

【问题讨论】:

  • 使用正则表达式,您无法区分“字符垃圾”和“有意义的内容”。因此dfhducom 被认为是相同的。提供更多文本 sn-ps 以最终看到模式。
  • 我已经用更多例子更新了这个问题

标签: python regex nlp


【解决方案1】:

仅使用正则表达式来解决这个问题有点困难。 您可以尝试将其分为两个步骤。

您可以(非常)粗略估计可能是一封电子邮件的内容。

((?:[^\"@:+={}()|\s]+ ?){1,3}\@ ?\w+(?: ?\. ?\w+)+)

[^@:+={}()|\s] 完全是在黑暗中拍摄的,但我怀疑这些字符会突然在 OCR 中作为误报出现。 这实际上将尝试匹配 1 到 3 个 ({1,3}) 文本块,这些文本块可能由空格 (...\s]+ ?)...) 分隔,这些文本块不包含 [^@:+={}()|\s] 中的一个字符,并且位于 @ 之前。然后它将尝试匹配一系列域名及其扩展名(.co.uk.com),可能用空格分隔 ?

然后您可以从匹配的序列中删除所有空格,并检查它们是否是具有正确库/正则表达式的有效电子邮件地址:How to check for valid email address?

不是最干净的解决方案,但我希望它有所帮助。

编辑

我看到您现在正在使用捕获组,这可以解释为什么如果您尝试过它对您不起作用。现在应该修好了。

RegexR example

【讨论】:

  • 在我给出的示例中,~~~txt4 = "我精通 python。geekcoder 12@gmail.com TX,美国"~~~理想的电子邮件 ID 是:geekcoder 12@gmail。 com 但我假设您将其误解为 python.geekcoder12@gmail.com。 “单词”和“@###.co##”之间只有“一个空格”
猜你喜欢
  • 1970-01-01
  • 2020-12-20
  • 2012-01-03
  • 2019-10-29
  • 2019-06-08
  • 1970-01-01
  • 2015-01-23
  • 2022-07-14
  • 1970-01-01
相关资源
最近更新 更多