【发布时间】:2021-03-10 11:14:09
【问题描述】:
我是正则表达式的新手,我真的很想知道如何指定特定范围的数据以使用非捕获组进行解析,然后使用捕获组过滤该数据。
具体来说,我正在使用 Invoice2Data 来解析 pdf 发票,并且需要为我的解析模板设置一个 yaml 文件。 yaml 文件使用正则表达式为 invoice2data 设置解析模板。
例如,假设我有一张发票。页面上有多个电子邮件地址,但我只想捕获“发票”之后的电子邮件:
Invoice for
John Doe
555 Nowhere Ave
johndoe@email.com
555.555.5555
我知道我可以通过以下方式捕获这些行:(?i)For\s(?:^(?:.*\n){4}) 返回:
John Doe
555 Nowhere Ave
johndoe@email.com
555.555.5555
问题是,例如,我不知道如何解析这个非捕获组以仅捕获电子邮件。我有这个正则表达式来查找电子邮件:([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9_-]+) 但它本身将包括发票中的所有电子邮件。另一个问题是并非所有发票都有地址,因此实际行号可能因发票而异。
如何混合使用:(?i)For\s(?:^(?:.*\n){4}) 和 ([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9_-]+) 以仅从发票的特定部分提取电子邮件?
【问题讨论】: