2009-12-09 61 views
0

我想写一个正则表达式来验证零件或型号。正则表达式来验证模型/零件编号

这些可以包含字母,数字,' - ','/'和空格。它们必须包含至少1个数字,长度在4到20个字符之间。

这里是我的琴弦的一些例子要匹配:

CVA 620 999 
M3094 
26250 
APL8215/APL8225 
1301 
02-700401 

这是我迄今为止

([\w- /]*\d){3,19} 

这似乎是工作除了会匹配字符串如 “这是我的型号APL8215”,我只希望它匹配“APL8215”部分。

反正有没有使用正则表达式来匹配这样的模型数字?

非常感谢任何帮助!

回答

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" 

最后的结果是由预期字边界值解释说: '/' 可以是单词边界。 如果你想解决这个问题,你必须在主Regex之前使用lookbehead和lookahead。

这就是你想要的吗?

+0

谢谢阿诺。它仍然拉出一些周围的话,但我不认为他们是这样! – carok 2009-12-10 14:07:45

0

不幸的是,由于你的正则表达式的灵活性,这当然会匹配上面指定的字符串。如果你能进一步限制你的标准,例如只包括大写字母,那么你就可以拿起这些代码与一个正则表达式,如:

[A-Z0-9- ]{4,20}

0

因为它似乎不是可能的组同样的伞下的所有型号,我会使用一个以上的正则表达式:

  • CVA xxx xxx
  • Mxxxx
  • xxxxx
  • APLxxxx

其中x是数字(从你的例子)等。一旦你提取了regexp的相关子集,你就可以优化你的解析或者将它们连接到相同的输出中。

1

IMO这是更好地使每个型号格式中的一个正则表达式和
然后在一个正则表达式将它们结合起来。

例:R = (modelA_regex)|(modelB_regex)|(modelC_regex)

+0

谢谢尼克。不幸的是,我没有确定所有数字格式的清单,加上它们是用户输入的(做一些数据挖掘),所以不要坚持任何格式! – carok 2009-12-10 14:11:40

1

这是接近我可以得到:

(?=.*\d)[\w\d\- ]{4,20} 

遗憾的是它不与例如工作,这是我的模型APL8215因为规则是务实足以匹配这是我的型号APL作为在匹配APL8215部件之前的有效部件号。