单行分隔文本

时间:2013-10-07 10:08:26

标签: regex

我有一行文字,其中包含从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 Descrizione Causale Vendita 1 NR   0OX3123 31230453 Valeria OCCHIALE ACCIAIO UOMO VISTA

作为代币,我想获得第一个:

1 NR 0PR 18OV DHO1O154 OCCHIALE ACETATO DONNA VISTA

解释,我的令牌应该是:

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

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

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

谢谢

2 个答案:

答案 0 :(得分:1)

在目前为止的正则表达式的基础上,你可以使用积极的前瞻:

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

regex101 demo

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

(?= ... )是一个积极的先行者,不算作比赛。因此,您可以在下一个\b\d\b NR或字符串$结束之前和之前获得匹配。

答案 1 :(得分:0)

@ Jerry的答案的简化版本:

\d NR(?:(?!\d NR).)*