0

如何从使用 pdfPlumber extract.text 函数从 PDF 中提取的文本中打印下一行?

我试过 line.next() 但它不起作用。

实际的工作名称在“工作名称”之后的那一行。按照下面的例子。

职位名称

奥尔巴尼购物中心开发

我的代码如下。

jobName_re = re.compile(r'(Job Name)')
siteAddress_re = re.compile(r'(Wellington\s)(.+)')
file = 'invoices.pdf'

lines = []

with pdfplumber.open(file) as myPdf:
    for page in myPdf.pages:
        text = page.extract_text()
        for line in text.split('\n'):
            jobName = jobName_re.search(line)
            siteAddress = siteAddress_re.search(line)
            if jobName:
                print('The next line that follows Job Name is', line.next())
            elif siteAddress:
                print(siteAddress.group(1))
4

1 回答 1

1

你有几个选择。

选项1

您可以切换到使用整数索引来循环记录:

lines = text.split('\n')
for i in range(len(lines)):
    line = lines[i]

然后就可以访问了lines[i+1]

选项 2

设置一个标志,表示您已经看到了工作名称的标题,然后在下一次循环中将其拾起。像这样的东西:

        last_was_job_heading = False
        for line in text.split('\n'):
            siteAddress = siteAddress_re.search(line)
            if last_was_job_heading:
                print('The next line that follows Job Name is', line)
            elif siteAddress:
                print(siteAddress.group(1))
            last_was_job_heading = jobName_re.search(line)

选项 3

根本不要将文本分成几行。而是使用更智能的正则表达式一次解析多行。

选项 4

使用某种解析库而不是正则表达式。在这种简单的情况下,这可能是矫枉过正。

于 2021-07-17T10:19:54.180 回答