我有以下字符串
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})