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

时间:2019-03-21 11:50:13

标签: regex invoice

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

模式(不区分大小写):"\bfactuur(nummer)" **OR** "Nr." **OR** "Nr(:)"后跟实际值"\d+" OR "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

DEMO正则表达式:

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

1 个答案:

答案 0 :(得分:0)

您的正则表达式仅需进行以下两项更改即可使其适用于所有样本。您可以使用此正则表达式,

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

Check online demo

这是我所做的两个更改,

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

希望这可以解决问题。让我知道您是否还有其他不匹配的样本。

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

Factuurnummer Factuurdate 1234 3-21-2019

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

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

Check this demo with additional sample data