我正在尝试匹配以下示例:
ZU2A ZS6D-9 ZT0ER-7 ZR6PJH-12
它是字母和数字的组合(字母数字)。 这是一个解释:
目前我有这个:
Z[R|S|T|U][0-9][A-Z]{1,}(\-)?([0-9]{1,3})
但这似乎并没有抓住所有的样本。
编辑:以下是完整字符串的示例:
ZU0D>APT314,ZT1ER,WIDE1,ZS3PJ-2,ZR5STU-12*/V:/021414z2610.07S/02814.02Ek067/019/A=005475!w%<!
任何帮助都将不胜感激。
谢谢
丹尼
答案 0 :(得分:5)
您的主要问题是整个可选部分应该被一组标有?
(=可选)的括号所包围。总而言之,你想要
Z[RSTU][0-9][A-Z]{1,3}(?:-[0-9]{1,2})?
一些额外的说明:
[RSTU]
或(?:R|S|T|U)
。(?:example)
而不是(example)
形式的组会阻止子表达式作为匹配项返回。它对哪些输入匹配没有影响。-
。这是example test case script in Python:
import re
s = r'Z[RSTU][0-9][A-Z]{1,3}(?:-[0-9]{1,2})?'
rex = re.compile(s)
for test in ('ZU2A', 'ZS6D-9', 'ZT0ER-7', 'ZR6PJH-12'):
assert rex.match(test), test
long_test = 'ZU0D>APT314,ZT1ER,WIDE1,ZS3PJ-2,ZR5STU-12*/V:/021414z2610.07S/02814.02Ek067/019/A=005475!w%<!'
found = rex.findall(long_test)
assert found == ['ZU0D', 'ZT1ER', 'ZS3PJ-2', 'ZR5STU-12'], found