Java 至少有一个字母的正则表达式模式
Java Regex Pattern with atleast one letter
我正在尝试从文本中提取字母数字序列。此序列的长度可以是五个或六个字符,必须以数字开头和结尾,并且中间至少有一个字母,例如:25D212
、4WX07
、8FZW5
、 2T784
、25XR47
这是我能够拼凑的
[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?"
我正在尝试从文本中提取字母数字序列。此序列的长度可以是五个或六个字符,必须以数字开头和结尾,并且中间至少有一个字母,例如:25D212
、4WX07
、8FZW5
、 2T784
、25XR47
这是我能够拼凑的
[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?"