最后一组中字符串的最后匹配的正则表达式



我有以下字符串

SO 01 053 675 A2

这里我需要

SO属于组1(组1最多只能有2个字符)。

第2组01 053 675。(第二组可以有空格,逗号,斜杠,点,破折号)

第3组A2(第3组最多有一个字母,最多有一个数字)。

以上组之间用空格和/或破折号或不带分隔符分隔。

我准备了以下内容。

^([A-Z|a-z]{2})*[-|s]*([A-Z]{0,2}[d|,|/|.]+)*[-|s]*([A-Z]?[d]?)

现在上面的正则表达式工作,只要组2没有空间。

WO 01.053/675 A2

但它不工作的空间在第二组,即使我添加空间在第二组在regex。

WO 01 053 675 A2

如何修复这个正则表达式?

下面我添加了sample。你可以看到,当有空格时,A2根本不映射到组3。

https://regex101.com/r/6FceHh/1

下面是所有需要支持的示例字符串,因为单独的解决方案会破坏其他东西。

在下列情况下,OK应进入第1组。中线应该放在第二组。最后一个字符串A1应该放在第3组。

'OK-' // Here Group 2 and Group 3 will be empty.
'OK-AB1234-A1'
'OK-1234-A1'
'OK-112-223-A1'
'OK 112 223 A1'
'OKB1A1'
'OKBB1A1'
'OK112223A1' // Here no separator is present.
'112.223' // Here Group 1 and Group 3 will be empty.
'112 223' // Here Group 1 and Group 3 will be empty.

使用三个可选组,中间使用[- ]分隔符,结果证明是有效的。

^b([A-Za-z]{2})?[- ]*([A-Z]{0,2}[d,/. -]*d)?[- ]*([A-Z]d?)?

下面是regex101的演示-b字边界将阻止空匹配。

你可以试试:^(w{2})s(.*)s(w{2})$

  • 匹配第一段/2字符:(w{2})
  • 中间部分:(.*)
  • 和最后两个字符:(w{2})

相关内容

最新更新