我正在尝试从文本中提取字母数字序列。此序列的长度可以是五个或六个字符,必须以数字开头和结尾,并且中间至少有一个字母,例如:25D212
,4WX07
,8FZW5
, 2T784
,25XR47
这是我能够把它放在一起的
[0-9][[0-9]|[a-zA-Z]]{3,4}[0-9]
此解决方案的问题在于它也匹配
888888
(至少有一个字符约束未得到满足)
答案 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)