我正在尝试使用正则表达式,使用组和反向引用来捕获发票字段的值,但是我只能看到第一个组,并且只有在使用\2
进行引用时,才能看到它。
要分析的文本:
财政发票
序列号和号码发票:BIC 15
日期:2015年1月13日
我的正则表达式是:
([Ii]nv\w*:\s)(.*)\1
表达似乎井然有序,但没有结果。我是regex的新手,请告诉我,我该怎么做?
答案 0 :(得分:0)
我认为您需要此正则表达式:
".*?[iI]nvoice:\s?(.*?)s?"
它首先匹配一个双quote
,然后匹配任意数量的任何字符,然后再匹配'Invoice
:',然后匹配一个可选的空白,然后创建一个Group 1
任何字符的数量,最后是一个可选的空格和双引号。
您想要的结果在组1中。
修改:
以防万一,您坚持使用反向引用,这也可以:
".*?([Ii]nv\w*).*?\1:\s(.*?)\s?"
首先从匹配双精度quote
开始,然后匹配任意数量的any char
(非贪婪),然后创建一个Group 1
,匹配'Inv'
和任意数量的{{1 }}字符,然后匹配任意数量的Word
(非贪婪),然后匹配any char
,后跟冒号(可选的空格),然后创建与任意数量的任何字符匹配的Group 2,直到它找到最佳空格,最后找到双引号。
您想要的结果将在第2组中(后向引用在第1组中)。
根据评论编辑(不带引号和3行):
backreference
首先从匹配[iI]nvoice:\s?([^\r\n]*)\r?\nDate:\s([\d\.]*)
:'(可选的白色'Invoice
)开始,然后创建与行的其余部分匹配的Space
。然后匹配以Group 1
:'结尾的行和可选的白色'Date
。然后创建Space
,匹配任意数量的Group 2
和digits
。
您将在dots
中获得发票编号,并在Group 1
中获得日期。