正则表达式匹配回车 return 后的数字与中间的文本

Regexp to match number after carriage return with text inbetween

有没有办法在字符串中匹配这种模式?

模式(不区分大小写):"\bfactuur(nummer)" **OR** "Nr." **OR** "Nr(:)" 后跟实际值 "\d+" "d{3,4} - d{3,4}"

很高兴(如果它实际上不是超现实的):"Factuur\n"忽略"Nr." "\d+"之间的所有内容。

测试时间:

Factuur: 2018-4005 

Factuur

Nr. 90424571 

 Factuurnummer: 2019-010

 factuur : 281319261

factuurnummer: 63

Factuurnummer: 281319264565

Factuur assdg 236373

   Factuurnummer 281319265

Factuurnummer 0723 - 1345

Factuur nr. 180262

Factuurnummer : 6322232

演示正则表达式:

https://regex101.com/r/PuGrqn/37

您的正则表达式只需进行两处更改即可使其适用于您的所有样本。你可以使用这个正则表达式,

\bfactuur(?:nummer|\n)?.*?(?<=\s)(\d+(?:\s*-\s*\d+)?)(?=\s|$)

Check online demo

这是我所做的两项更改,

  • 除了nummer之外,如果factuur后面可以紧跟一个换行符,那么只需将\nnummer
  • 交替放置
  • (\d+) 增强到 (\d+(?:\s*-\s*\d+)?) 使其不仅可以匹配数字,还可以选择匹配一些可选的白色 space 然后是连字符然后再匹配一些可选的白色 space 最后跟一个数字,这就是为什么我在 \d+
  • 之后添加 (?:\s*-\s*\d+)?

希望这能解决问题。如果您还有任何不匹配的样本,请告诉我。

编辑:用于捕获这样的字符串

Factuurnummer Factuurdate 1234 3-21-2019

可以使用此正则表达式增强模式以捕获由 space 或连字符分隔的多个数字,

\bfactuur(?:nummer|\n)?.*?(?<=\s)(\d+(?:\s*-?\s*\d+)*)(?=\s|$)

Check this demo with additional sample data