根据行号检索文本

时间:2019-05-01 16:45:45

标签: python-3.x text

我正在读取OCR图像文件并将其转换为文本。现在,我需要提取一个特定的文本。

生成的文本(不完整的文本):

FROM: 2902 W SWEETWATER AV #1100
Phoenix, AZ 95029

TO: BANNER THUNDERBIRD MED CTR
5855 W THUNDERBIRD RD
Glendale, AZ 85307

c9 23 1975 x

我需要在 FROM:段下提取 95029 。我当时想先获取FROM:段的行号,然后再加上一个来获取下一个行号,并应用正则表达式来检索文本。但是,我无法输入下一个行号的文本。

for num, line in enumerate(text.splitlines()):
    if 'FROM:' in line:
        num = num+1
        print(num)
        break
#print(line)

我可以获取行号,但不能获取文本。请提出建议。

2 个答案:

答案 0 :(得分:1)

将拆分的文本列表保存到变量中,text_list = text.splitlines()之后,您可以使用text_list[num+1]

访问下一行

尝试这样的事情:

text = """FROM: 2902 W SWEETWATER AV #1100
Phoenix, AZ 95029

TO: BANNER THUNDERBIRD MED CTR
5855 W THUNDERBIRD RD
Glendale, AZ 85307

c9 23 1975 x"""



desired_line = ''
text_list = text.splitlines()

for num, line in enumerate(text_list):
    if 'FROM:' in line:
        desired_line = text_list[num+1]
        break

print(desired_line) # prints desired line
print(desired_line.split()[-1]) # prints Number you seeked

答案 1 :(得分:0)

如果“发件人”地址的格式相同,您也可以通过正则表达式进行操作。类似的正则表达式也可以用于查找“收件人”地址和邮政编码。

text = """FROM: 2902 W SWEETWATER AV #1100
Phoenix, AZ 95029

TO: BANNER THUNDERBIRD MED CTR
5855 W THUNDERBIRD RD
Glendale, AZ 85307 

c9 23 1975 x"""

import re
res=re.search("FROM:.*\n(([a-zA-Z]+),\s*([A-Z]{2})\s+(\d{5})\n)",text)
if res is not None:
    print(res.group(0)) ## From address
    print(res.group(1)) ## city, state zip----Phoenix, AZ 95029
    print(res.group(4)) ## zip---95029