编写灵活的正则表达式

问题描述 投票:1回答:1

我正在尝试编写一个程序,该程序从屏幕截图中读取文本,然后从中识别出各种PII。使用pytesseract读取文本,我试图为URL,电子邮件ID等编写正则表达式。这是一个函数示例,该函数接收字符串并返回True电子邮件ID,否则返回False

def email_regex(text):
    pattern = compile(r"\A[a-z0-9!#$%&'*+/=?^_‘{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_‘{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?")
    return bool(pattern.match(text))

此功能适用于所有格式正确的电子邮件ID([email protected]),但是由于该功能的输入是从pytesseract读取的文本,因此不能保证该文本的格式正确。我的函数为False返回abc@xyzdd。我在URL正则表达式,域名正则表达式等方面也遇到了同样的问题。有没有办法使我的正则表达式更加健壮,以便从pytesseract读取错误?

我已经尝试遵循对this答案的公认解决方案,但这导致正则表达式函数也为随机单词返回True。解决该问题的任何帮助将不胜感激。

编辑:-这是我的url和域正则表达式,在这里我遇到了与电子邮件正则表达式相同的问题。这些方面的任何帮助对我来说都是非常有用的。

    pattern = compile(r'\b(((([a-zA-Z0-9])|([a-zA-Z0-9][a-zA-Z0-9\-]{0,86} 
    [a-zA-Z0-9]))\.(([a-zA-Z0-9])|([a-zA-Z0-9][a-zA-Z0-9\-]{0,73}[a-zA-Z0-9]))\.(([a-zA-Z0-9]{2,12}\.[a-zA-Z0-9]{2,12})|([a-zA-Z0-9]{2,25})))|((([a-zA-Z0-9])|([a-zA-Z0-9][a-zA-Z0-9\-]{0,162}[a-zA-Z0-9]))\.(([a-zA-Z0-9]{2,12}\.[a-zA-Z0-9]{2,12})|([a-zA-Z0-9]{2,25}))))\b', IGNORECASE)
    return pattern.match(text)```


  def url_regex(text):
    pattern = compile(r'(http|https://)?:(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F])+)', IGNORECASE)
    return pattern.match(text)
python regex python-tesseract
1个回答
0
投票

可能在换行符中添加一些标志,例如ignorecase和DOTALL:

my_pattern = compile(r"email_pattern", re.I, re.S)
© www.soinside.com 2019 - 2024. All rights reserved.