我试图从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)发布于 2019-05-01 09:41:39
也去掉那个循环,只使用
x= re.findall(r'A[0-9][0-9][0-9][0-9]', text)没有任何循环。(“删除^太”)
发布于 2019-05-01 09:42:32
text是一个字符串,当使用for-loop循环一个字符串时,它的默认行为是循环这些字符(因为字符串基本上是一个字符列表)。
要循环遍历这些行,首先使用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应答一起跳过循环:)
发布于 2019-05-01 09:41:13
regex中的问题是启动锚点^,它期望匹配的文本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']https://stackoverflow.com/questions/55934248
复制相似问题