我有一个谷歌应用程序脚本,解析一些PDF文件,我开始与以下正则表达式,检索5组3digits从Reference
标签:
[w,W,s,S]*(\d{3}).?(\d{3}).?(\d{3}).?(\d{3}).?(\d{3})
我添加到它更多的通用性,也检索9位数组合的Reference
标签;
[w,W,s,S]*(\d{3}).?(\d{3}).?(\d{3}).?(\d{3})?.?(\d{3})?
两个版本都只匹配数字,没有单词,这很完美。
- 我还想检索与
Amount
标记相关的数字,同时忽略其间的任何单词和数字。但在这里我遇到了一些麻烦。**
- 我还想检索与
我试过:
.*?(?:Ref)(?:.*:) ? ?(\d{3}).?(\d{3}).?(\d{3}).?(\d{3})?.?(\d{3})?
但它已经开始包括这个词。
这是使用正则表达式的文本的一些虚拟文本示例:
- 可以在每个"标记"后包含更多单词(例如:* 一米三米一x *//*一米四米一x *:)
- 是否可以具有
:
Some dummy text that may have words in common like `reference` or `amount` throughout the document
Reference: 245 154 343 345 345
Entity: 34567
Amount: 11,11
Payment date: 14/07/2022
Some more text
提前感谢您的帮助。
1条答案
按热度按时间eit6fx6z1#
您可以使用:
参见regex101 demo。
或者考虑到
Reference of something // Amount of first payment:
,可以使用[^\d\n]*
匹配除数字或换行符以外的任何字符:^
字符串开始Reference
[^\d\n]*[\t ]
匹配数字或换行符以外的可选字符,然后匹配空格或制表符 (您也可以使用\s*
,但也可能匹配换行符)(\d{3})[\t ]*(\d{3})[\t ]*(\d{3})[\t ]*(\d{3})[\t ]*(\d{3})
将捕获group 1与捕获group 5相匹配,捕获的数字之间有空格或制表符(?:
非夺获组\n(?!Amount\b)
匹配一个换行符,并Assert不是右边的单词Amount
\S.*
匹配非空白字符,后跟该行的其余部分)*
关闭非捕获组并选择重复此操作Amount
[^\d\n]*[\t ]
匹配除数字或换行符以外的可选字符,然后匹配空格或制表符(\d+(?:,\d+)?)
捕获组6,匹配1+位数,并可选地匹配逗号与1+位数\b
防止部分字匹配的字边界参见另一个regex101 demo。