Java Regex Pattern至少有一个字母

时间:2015-01-12 17:38:24

标签: java regex

我正在尝试从文本中提取字母数字序列。此序列的长度可以是五个或六个字符,必须以数字开头和结尾,并且中间至少有一个字母,例如:25D2124WX078FZW52T78425XR47

这是我能够把它放在一起的

[0-9][[0-9]|[a-zA-Z]]{3,4}[0-9]

此解决方案的问题在于它也匹配

888888(至少有一个字符约束未得到满足)

3 个答案:

答案 0 :(得分:1)

<强>广义
基于排列(下面),看起来它可以推广到这个

 # (?i)\d(?=\d{0,3}[a-z])[a-z\d]{3,4}\d

 (?i)
 \d                   # A digit
 (?= \d{0,3} [a-z] )  # a letter in the next 1 to 4 characters
 [a-z\d]{3,4}         # 3 to 4 digits or letters
 \d                   # A digit

排列

 # (?i)\d(?:[a-z][a-z\d]{2,3}|\d[a-z][a-z\d]{1,2}|\d\d[a-z][a-z\d]{0,1}|\d\d\d[a-z])\d

 (?i)
 \d 
 (?:
      [a-z] 
      [a-z\d]{2,3} 
   |  
      \d 
      [a-z] 
      [a-z\d]{1,2} 
   |  
      \d\d 
      [a-z] 
      [a-z\d]{0,1} 
   |  
      \d\d\d 
      [a-z] 
 )
 \d

输入

for example: 25D212, 4WX07, 8FZW5, 2T784, 25XR47

输出

 **  Grp 0 -  ( pos 13 , len 6 ) 
25D212  

 **  Grp 0 -  ( pos 21 , len 5 ) 
4WX07  

 **  Grp 0 -  ( pos 28 , len 5 ) 
8FZW5  

 **  Grp 0 -  ( pos 28 , len 5 ) 
8FZW5  

 **  Grp 0 -  ( pos 42 , len 6 ) 
25XR47  

答案 1 :(得分:0)

你可以用一个正则表达式模式来解决这个问题,但你可以用两种模式来解决它。

第一种模式将是:

\d[0-9a-zA-Z]{3,4}\d

(注意:\d[0-9]

相同

第二种模式将是:

\d+[a-zA-Z]+\d+

第一个模式控制字符串的大小,第二个模式确认它包含至少一个字母字符。

测试Java正则表达式模式的良好资源:http://www.regexplanet.com/advanced/java/index.html

看起来Avinash Raj的帖子是正确的答案。我将离开我的选择(尽管可能不是最理想的)

答案 2 :(得分:-1)