我在PHP和其他代码中使用了以下正则表达式。
/^(?:(?=[^ ]+\d)(?:[A-Z0-9]+))|(?:[A-Z0-9]+) +?(?=.*\d)(?:[A-Z0-9]+)?
事实证明,Go并不支持查看头,而且我对如何将其转换不知所措。
Debuggex链接有一些测试数据,我之前用它来验证代码。
答案 0 :(得分:1)
首先,交替/^...
的左侧不匹配任何内容,因为/
在输入开始之前永远不会出现。
只留下(?:[A-Z0-9]+) +?(?=.*\d)
,可以表示为:
((?:[A-Z0-9]+) ).*\d.*
使用的术语" +?"
与" "
的效果完全相同。
但请注意,这比原始输入消耗更多,这是不可避免的。您的原始匹配现在位于第1组。