正则表达式截断号码

时间:2018-10-18 14:09:38

标签: regex

我只想从此文本中提取订单号:

  

magnalister-Verarbeitung(Amazon)Marketplace Bestellnummer:   306-3584295-9664328 **业务订单**采购订单号:?()_!

要过滤,我得到以下正则表达式:[^.//][a-zA-ZäÄöÖüÜ_\(\):!\?\.\*\n\n\r\n$ ]+

奇怪的是,该命令切断了订单号中的最后一个数字。

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

您可以尝试以下正则表达式:

Bestellnummer:\s([\d-]+)

然后抓取Group 1,其中将包含order number

正则表达式通过匹配'Bestellnummer:'来工作,然后再创建包含任意数字和连字符的匹配组。该组就是您想要的。

答案 1 :(得分:0)

它截取最后一位数字的原因是因为您的匹配以[^.//]开头,该数字也将匹配一位数字。然后,此部分[a-zA-ZäÄöÖüÜ_\(\):!\?\.\*\n\n\r\n$ ]+将匹配一个星号,但不匹配数字。因此,您的比赛开始时包括8

8** BUSINESS ORDER **Purchase Order Number: ?()_!

保留原始正则表达式,可以解决此问题的一种方法是也不要匹配第一部分[^\d./]中的数字

您的正则表达式可能更紧凑,例如[^\d./][a-zA-ZäÄöÖüÜ_():!?.*$\s]+

请注意,您使用字符类,并且只可以添加一次'\ n'。您也不必逃脱圆点,星号和问号。

Regex demo

如果可以选择匹配,则可以考虑使用\b\d{3}-\d{7}-\d{7}\b 或更广泛的匹配,例如\d+(?:-\d+){2}