我正在尝试从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)
答案 0 :(得分:2)
也摆脱for循环,仅使用
x= re.findall(r'A[0-9][0-9][0-9][0-9]', text)
没有任何循环。 (“也删除^”)
答案 1 :(得分:1)
正则表达式中的问题是起始锚点^
,它希望匹配的文本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']
答案 2 :(得分:1)
text
是一个字符串,使用for
循环遍历一个字符串时,Python的默认行为是遍历字符(因为字符串基本上是一个字符列表)。
要遍历各行,请首先使用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答案一起跳过循环:)