Я пытаюсь извлечь несколько полей из изображения OCR. Я использую pytesseract для чтения файла изображения OCR, и это работает, как ожидалось.
Код:
import pytesseract
from PIL import Image
import re
pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-
OCR\tesseract.exe"
value = Image.open("ocr.JPG")
text = pytesseract.image_to_string(value)
print(text)
Вывод:
ALS 1 Emergency Base Rate
Y A0427 RE ABC
Anbulance Mileage Charge
Y A0425 RE ABC
Disposable Supplies
Y A0398 RH ABC
184800230, x
Затем я должен извлечь A0427 и A0425 из текста ... но проблема в том, что я не перебираю всю строку ... он принимает один символ за раз, и поэтому мое регулярное выражение не работает ..
Код:
for line in text :
print(line)
x= re.findall(r'^A[0-9][0-9][0-9][0-9]', text)
print(x)
3 ответа
Избавьтесь от этого для цикла также, используйте только
x= re.findall(r'A[0-9][0-9][0-9][0-9]', text)
Без всякой петли. («Удалить ^ тоже»)
text
- это строка, поведение по умолчанию для Python при циклическом цикле по строке с использованием for
- цикл для циклического перемещения по символам (поскольку строка в основном представляет собой список символов).
Чтобы перебрать строки, сначала разбейте текст на строки, используя text.splitlines()
:
for line in text.splitlines() :
print(line)
x= re.findall(r'^A[0-9][0-9][0-9][0-9]', text)
print(x)
РЕДАКТИРОВАТЬ: Или используйте ответ Patels, чтобы пропустить цикл все вместе :)
Проблема в вашем регулярном выражении - это начальный якорь ^
, который ожидает, что ваш соответствующий текст A0425
должен начинаться с самого начала строки, и это действительно не тот случай, так как у вас есть Y
и пробел перед ним , Так что просто удалите ^
из вашего регулярного выражения, и тогда вы получите все ожидаемые строки. Кроме того, вы можете изменить четыре из этого [0-9]
, чтобы написать как [0-9]{4}
, и ваше сокращенное регулярное выражение становится,
A[0-9]{4}
Вам нужно изменить ваш текущий код, например,
import pytesseract
from PIL import Image
import re
pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-
OCR\tesseract.exe"
value = Image.open("ocr.JPG")
text = pytesseract.image_to_string(value)
print(re.findall(r'A[0-9]{4}', text))
Это должно печатать все ваши совпадения без необходимости зацикливания по отдельности в строки,
['A0427', 'A0425', 'A0398']
Похожие вопросы
Новые вопросы
regex
Регулярные выражения предоставляют декларативный язык для сопоставления шаблонов в строках. Они обычно используются для проверки, синтаксического анализа и преобразования строк. Поскольку регулярные выражения не полностью стандартизированы, все вопросы с этим тегом должны также включать тег, определяющий применимый язык программирования или инструмент.