我正在尝试编写一个正则表达式来验证零件或型号。
这些可以包含字母,数字,' - ','/'和空格。它们必须包含至少1个数字,长度在4到20个字符之间。
以下是我想要匹配的字符串的一些示例:
CVA 620 999
M3094
26250
APL8215/APL8225
1301
02-700401
这是我到目前为止所拥有的
([\w- /]*\d){3,19}
它似乎与它分开将匹配字符串,如 “这是我的型号APL8215”,我只希望它与“APL8215”部分相匹配。
无论如何使用正则表达式匹配这样的型号?
非常感谢任何帮助!
答案 0 :(得分:1)
IMO最好为每个型号格式制作一个正则表达式 然后将它们组合在一个 big 正则表达式中。
示例:r = (modelA_regex)|(modelB_regex)|(modelC_regex)
答案 1 :(得分:1)
尽可能接近:
(?=.*\d)[\w\d\- ]{4,20}
不幸的是,它不适用于示例这是我的模型APL8215 ,因为规则足够实用,可以匹配这是我的模型APL 作为有效的部件号匹配 APL8215 部分。
答案 2 :(得分:0)
不幸的是,由于你的正则表达式的灵活性,这当然会匹配你上面指定的字符串。如果您可以进一步限制条件,例如只包含大写字母,那么您可以使用正则表达式来获取这些代码,例如:
[A-Z0-9- ]{4,20}
答案 3 :(得分:0)
由于似乎无法将所有型号分组在同一个保护伞下,我会使用多个正则表达式:
CVA xxx xxx
Mxxxx
xxxxx
APLxxxx
其中x
是一个数字(来自您的示例),依此类推。一旦提取了相关的regexp子集,就可以优化解析或将它们连接到相同的输出中。
答案 4 :(得分:0)
我认为这个可以回应你的问题:
\b((?=[A-Za-z/ -]{0,19}\d)[A-Za-z0-9/ -]{4,20})\b
它查找由[A-Za-z0-9 / - ]字符组成的4到20个字符串,该字符串必须“独立”(\ b代表字边界)。 此字符串必须至少包含一个数字:这是通过前瞻表达式完成的:(?= [A-Za-z / - ] {0,19} \ d)。
使用以下示例:
CVA 620 999
M3094
26250
APL8215/APL8225
1301
1232-1231
02-700401
DGEIVEOCE
cdzjkblcvsz#56464e
siovbsbf~1313/
APL8215/APL8225APL8215/APL8225
我明白了:
"CVA 620 999"
"M3094"
"26250"
"APL8215/APL8225"
"1301"
"1232-1231"
"02-700401"
"56464e"
"1313"
"APL8215/"
"APL8225APL8215/"
"APL8225"
最后的结果用预期的字边界值来解释:'/'可以是字边界。 如果你想解决这个问题,你必须先使用lookbehind并在主Regex之后进行预测。
这就是你想要的吗?