python - 编写灵活的正则表达式
问题描述
我正在尝试编写一个程序,从屏幕截图中读取文本,然后从中识别各种 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(abc@xyz.dd),但由于该函数的输入是从 pytesseract 读取的文本,因此不能保证文本格式正确。我的函数返回False
. abc@xyzdd
我在 URL 正则表达式、域名正则表达式等方面遇到了同样的问题。有没有办法让我的正则表达式更健壮地从 pytesseract 读取错误?
我已经尝试遵循这个答案的公认解决方案,但这会导致正则表达式函数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', re.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])+)', re.IGNORECASE)
return pattern.match(text)
解决方案
也许为换行添加一些标志,例如 ignorecase 和 DOTALL:
# Match email ID:
my_pattern = compile(r"^[a-z0-9]+[\._]?[a-z0-9]+[@]\w+[.]?\w{2,3}$", re.I, re.S)
匹配网址:
推荐阅读
- r - 找不到功能,但是包肯定是安装加载的
- r - 减去并找到值或体积的差异
- html - iframe 后面的下拉菜单?
- j - 从时间设置RNG种子
- asp.net-core - 使用 Azure DevOps 将 Asp.Net Core 应用程序部署到 Azure 时未找到包
- python-3.x - 在 Window 7 上运行“从 skimage 导入数据”代码时发现“ModuleNotFoundError”
- dc.js - 为什么在折线图的上方和下方都呈现黑色区域?
- c - Xcode 中的 Git 忽略
- r - 如何在 R 的向量中包含变量?
- java - 如何在代码中的确切位置将数据从 firebase 提取到 android studio 中?