0

我有一个包含发票行的单行文本,从 pdf 中提取。

我应该解析它,将行作为输出标记。

这是一个片段:

1 NR 0PR 18OV DHO1O154 OCCHIALE ACETATO DONNA VISTA 1 NR 0PR 18OV NAG1O152 OCCHIALE ACETATO DONNA VISTA 1 NR 0PR 61QV 7AX1O156 OCCHIALE METALLO UOMO VISTA Descrizione Causale Vendita 2 NR 0AN4007 41 / 87 66 OCCHIALE NYLON UOMO SOLE Descrizione Causale Vendita 1 NR 0EA4001 50638G56 Valeria OCCHIALE NYLON UOMO SOLE Descrizione Causale Vendita - Pag 1 di 3 - Segue - 1 NR 0PO3042S 972 / M351 Sofia OCCHIALE ACETATO UOMO SOLE Descrizione Causale Vendita 1 NR 0AN3048 502 / 8G30 Valeria OCCHIALE METALLO UOMO SOLE Descrizione Causale Vendita 6 NR 0DG4204 27648764 OCCHIALE ACETATO UOMO SOLE描述 因果关系 1 NR 0OX3123 31230453 Valeria OCCHIALE ACCIAIO UOMO VISTA

作为令牌,我想获得例如第一个:

1 NR 0PR 18OV DHO1O154 OCCHIALE ACETATO DONNA VISTA

解释一下,我的令牌应该是:

  • 整数开头+*space*+NR+空格
  • 包含开始后我能找到的任何内容,字符串,数字,等等......
  • 结束之前:下一个“X+NR”开始标记、固定字符串(例如“Descrizione Causale Vendita”)或文件结尾。

使用这个正则表达式(\b\d+\b NR),我可以匹配所有 X+NR 起始标记,如何在下一个 X+NR 标记之前选择下一部分?

注意标题!我都在一行中,所以...没有新的行分隔符

谢谢

4

2 回答 2

1

在您目前拥有的正则表达式的基础上,您可以使用积极的前瞻:

(?:\b\d+\b NR).*?(?=\b\d+\b NR|$)

正则表达式101演示

每种颜色表示不同的匹配。

(?= ... )是一个积极的前瞻,不算匹配。\b\d\b NR因此,您会在string 的下一个或 end之前和之前得到匹配$

于 2013-10-07T10:12:50.657 回答
0

A somewhat simplified version of @Jerry's answer:

\d NR(?:(?!\d NR).)*
于 2013-10-07T12:21:23.443 回答