问题描述
我想验证以下表达式:
- “CODE1:123/CODE2:3467/CODE1:7686”
- “CODE1:9090”
- “CODE2:078/CODE1:7788/CODE1:333”
- “CODE2:77”
就我而言,模式 'CODE1:xx' 或 'CODE2:xx' 以任何不同的顺序给出。 我可以对模式进行排序,使它们像“CODE1:XX/CODE1:YY/CODE2:ZZ” 并检查是否匹配
r'[CODE1:\d+]*[CODE2:\d+]*'
我们能否缩短它:是否可以用一个正则表达式匹配器来解决这个问题? 谢谢
解决方法
此正则表达式将为所有 4 种情况提供匹配:CODE[12]:\d+(?:/CODE[12]:\d+)*
请看这里:https://regex101.com/r/wn30a5/1
它将匹配 CODE
后跟 1
或 2
,然后是带有数字的冒号 :
;并可选择后跟斜杠 /
和该模式,次数不限。因此,不允许使用尾随斜杠,它也可以显示为单个代码;并且以任何顺序;所以不需要先排序。
CODE
是静态的,但在它之后数字是动态的,为了使它更短,只需使用 CODE\d:\d+
如果您只想匹配 :
后的两位数字,请使用 CODE\d:\d{2}