在非捕获组RegEx中捕获电子邮件地址
我是regex新手,我真的很难确定如何指定一个特定的数据范围,用一个非捕获组解析,然后用捕获组过滤数据 具体来说,我使用Invoice2Data解析pdf发票,需要为解析模板设置yaml文件。yaml文件使用正则表达式为invoice2data设置解析模板 例如,假设我有一张发票。页面上有多个电子邮件地址,但我只想捕获“发票”后面的电子邮件: 我知道我可以用如下方式捕获这些行:在非捕获组RegEx中捕获电子邮件地址,regex,yaml,Regex,Yaml,我是regex新手,我真的很难确定如何指定一个特定的数据范围,用一个非捕获组解析,然后用捕获组过滤数据 具体来说,我使用Invoice2Data解析pdf发票,需要为解析模板设置yaml文件。yaml文件使用正则表达式为invoice2data设置解析模板 例如,假设我有一张发票。页面上有多个电子邮件地址,但我只想捕获“发票”后面的电子邮件: 我知道我可以用如下方式捕获这些行:(?I)For\s(?:^(?.*\n){4},返回: John Doe 555 Nowhere Ave johndoe
(?I)For\s(?:^(?.*\n){4}
,返回:
John Doe
555 Nowhere Ave
johndoe@email.com
555.555.5555
问题是,例如,我不知道如何解析这个非捕获组以仅捕获电子邮件。我有一个正则表达式来查找电子邮件:([a-zA-Z0-9.\u-]+@[a-zA-Z0-9.\u-]+\.[a-zA-Z0-9\u-]+)
但这本身将包括发票中的所有电子邮件。另一个问题是,并非所有发票都有地址,因此实际行号可能因发票而异
如何混合:
(?I)For\s(?:^(?:.*\n){4}
和([a-zA-Z0-9.\u-]+@[a-zA-Z0-9.\u-]+\.[a-zA-Z0-9.\u-]+)
仅从发票的特定部分提取电子邮件?您可以使用与发票匹配的模式,然后是所有不以电子邮件地址开头的行,如模式或|发票,用于使用负向前瞻(?!
在前瞻中检查
发票的
,可防止为错误的发票匹配电子邮件地址,因为电子邮件地址可以是可选的
然后在组1中使用您的特定模式捕获电子邮件地址
^Invoice for(?:\r?\n(?![^\s@]+@[^\s@]|Invoice for\b).*)*\r?\n([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9_-]+)
或者在负面展望中使用完整的电子邮件模式
^Invoice for(?:\r?\n(?![a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9_-]|Invoice for\b).*)*\r?\n([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9_-]+)
^Invoice for(?:\r?\n(?![a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9_-]|Invoice for\b).*)*\r?\n([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9_-]+)