Я пытаюсь написать программу, которая считывает текст со снимков экрана, а затем определяет по нему различные PII. Используя pytesseract для чтения текста, я пытаюсь написать регулярное выражение для URL-адресов, идентификаторов электронной почты и c. Вот пример функции, которая принимает строку и возвращает True
идентификаторы электронной почты и 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))
Эта функция хорошо работает для всех идентификаторов электронной почты в правильном формате (abc@xyz.dd ), но поскольку входом в функцию является текст, считанный из pytesseract, не гарантируется, что текст будет правильно отформатирован. Моя функция возвращает False
для abc@xyzdd
. У меня те же проблемы с регулярным выражением URL, регулярным выражением доменного имени и т. Д. c. Есть ли способ сделать мои выражения регулярных выражений более устойчивыми к чтению ошибок из 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)