Java中如何编写可匹配各类特殊格式缩写词的正则表达式?
解决方案
修正后的Java代码
public static boolean isAcronyms(String s){ // 规则:整个字符串至少包含2个大写字母,其余可为任意字母、数字、特殊字符 return s.matches("^(?=(?:.*[A-Z]){2,})[\\p{L}\\p{N}\\p{P}\\p{S}]+$"); }
正则规则说明
^匹配字符串开头,$匹配字符串结尾,配合String.matches()的全量匹配特性,确保校验的是整个输入单词(?=(?:.*[A-Z]){2,})正向肯定预查:校验字符串中至少存在2个大写英文字母,该规则仅做校验不消耗匹配字符[\\p{L}\\p{N}\\p{P}\\p{S}]+匹配1个及以上合法字符,覆盖所有你需要的字符类型:\p{L}:任意大小写字母\p{N}:任意数字\p{P}:任意标点符号(包含示例中的&///-等)\p{S}:任意特殊符号,覆盖更多扩展场景
原写法问题排查
- 第一个正则是为匹配带点的缩写(如
U.S.A.)设计,完全不符合你的需求,同时存在语法错误(预查未闭合括号)、Java转义错误的问题 - 第二个正则
[A-Z].*[A-Z]逻辑接近,但没有限制输入为单个单词,会错误匹配包含空格的多单词内容 - 第三个正则限制了大写字母的出现格式,无法匹配带特殊符号、数字的缩写场景
匹配验证
你给出的所有示例均可正常匹配:
- eCRM ✅
- L&T ✅
- T/C ✅
- Top/Bo ✅
- e-TV ✅
- SDLC ✅
- RA/VI ✅
- Ra&Vi ✅
- RaVi ✅
- JB007 ✅
内容的提问来源于stack exchange,提问作者Sun
相关产品推荐
相关产品推荐

