Java 至少有一个字母的正则表达式模式

Java Regex Pattern with atleast one letter

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

这是我能够拼凑的

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

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

888888(至少有一个字符限制不满足)

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

第一个模式类似于:

\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 post 是正确答案。我将保留我的选项(可能不是最理想的)

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

 # (?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  

@Avinash Raj 已经有好看的图案了,不过我想分享一下我的替代方案:

\b(?=[0-9a-zA-Z]{5,6}\b)\d.*[a-zA-Z].*\d\b

如果将其拆分为测试 5-6 个字符的字母数字字符串的前瞻断言和测试格式的实际模式(以一个数字,中间某处有一个字母)。这大致对应于您最初对问题的措辞,因此以后阅读和记忆起来可能更容易 "what the heck does this do?"