Java正则表达式的麻烦
我有一个字符串需要使用正则表达式提取。最好只使用一个正则表达式。因为它与9个预先存在的正则表达式一起在循环中使用(也就是说,我可以将它添加到可用正则表达式的ArrayList中)
弦的模式永远是
在{4,8}A-Z0-9之间。后跟,
[A-Z]{1}或[A-Z0-9]{2}或另一个[A-Z0-9]{4,8}
例如:
“A1B1C1 ABCD E FGHI JK X0Y0Z0”
我希望这能让你赢回四场比赛
A1B1C1 & ABCD E & FGHI JK & X0Y0Z0
我一直在尝试匹配{4,8}特征的第一部分,然后是{1,2}的非贪婪匹配。例如:
[A-Z0-9]{4,8}(\\s{1}[A-Z0-9]{1,2})*? && [A-Z0-9]{4,8}(\\s{1}[A-Z]{1}|\\s{1}[A-Z0-9]{2})*?
但这永远不会返回超过第一个{4,8}字符
# 1 楼答案
您可以使用带有单词边界和可选部分来匹配
[A-Z0-9]{2}
或[A-Z]
\b
单词边界[A-Z0-9]{4,8}
匹配4-8次A-Z0-9(?:
非捕获组\h+
匹配1+水平空白字符(?:[A-Z0-9]{2}|[A-Z])
匹配2个A-Z0-9或1个A-Z)?
关闭非捕获组并将其设置为可选\b
单词边界Regex demo| Java demo
在爪哇