我有一个包含发票行的单行文本,从pdf中提取。
我应该解析它,获取行作为输出标记。
下面是一个片段:
1 NR 0PR 18OV DHO1O154 OCCHIALE ACETATO DONNA VISTA 1 NR 0PR 18OV NAG1O152 奥基亚莱 阿塞塔托 唐娜维斯塔 1 NR 0PR 61QV 7AX1O156 奥基亚莱 METALLO UOMO VISTA Descrizione Causale Vendita 2 NR 0AN4007 41/87 66 奥基亚莱尼龙 UOMO 鞋底 Descrizione 考萨莱旺迪塔 1 NR 0EA4001 50638G56 缬草 奥基亚莱 尼龙 尤莫 鞋底 Descrizione 考萨莱·旺迪塔 - 第 1 页 di 3 - 塞格 - 1 NR 0PO3042S 972/M351 索非亚 奥基亚莱 阿西塔托 UOMO 鞋底 Descrizione 考萨莱·旺迪塔 1 NR 0AN3048 502/8G30 缬草 奥基亚莱金属 UOMO 鞋底 Descrizione 考萨莱旺迪塔 6 NR 0DG4204 27648764 奥基亚莱 醋酸 乌莫 鞋底 1 NR 0OX3123 31230453 瓦莱里娅·奥基亚莱 阿恰约·乌莫维斯塔
我想获取,作为令牌,例如第一个:
1 NR 0PR 18OV DHO1O154 奥基亚莱·阿塞塔托 唐娜·维斯塔
解释一下,我的令牌应该是:
- 以整数+*空格*+NR+空格开头
- 包含我开始后能找到的任何内容,字符串,数字,等等......
- 结束之前:下一个"X+NR"起始标记,固定字符串(如"Descrizione Causale Vendita"(或文件结尾。
使用此正则表达式(bd+b NR)
我可以匹配所有 X+NR 起始令牌,如何在下一个 X+NR 令牌之前选择下一部分?
注意标题!我都在一行中,所以...没有新的行分隔符!
谢谢
基于您目前拥有的正则表达式,您可以使用积极的展望:
(?:bd+b NR).*?(?=bd+b NR|$)
正则表达式101演示
每种颜色表示不同的匹配。
(?= ... )
是一个积极的展望,不算匹配。因此,您会在字符串$
的下一个bdb NR
或结束之前和之前获得匹配项。
@Jerry答案的简化版本:
d NR(?:(?!d NR).)*