如何使用正则表达式分割含大写字母、数字及括号的字符串?
解决字符串分割需求:分离大写开头单词、数字与括号
你的需求是将字符串中的大写开头单词、数字、括号分别用空格分隔,比如把"Hakan2Ev"转为"Hakan 2 Ev","(Ha2Oy2)12"转为"( Ha 2 Oy 2 ) 12"。之前的代码仅能处理大写字母开头的分割,这里提供更完善的正则方案:
实现代码
用replaceAll方法一步完成分隔,无需拆分数组再拼接:
String input = "(Ha2Oy2)12"; // 示例输入 String output = input.replaceAll("(?<=\\p{Ll})(?=\\p{Lu})|(?<=\\D)(?=\\d)|(?<=\\d)(?=\\D)|(?<=\\))(?=\\S)|(?<=\\S)(?=\\()", " "); System.out.println(output); // 输出: ( Ha 2 Oy 2 ) 12
正则规则解释
正则里的每个分组对应一种需要插入空格的场景:
(?<=\p{Ll})(?=\p{Lu}):小写字母后紧跟大写字母时,中间加空格(比如"kanE"→"kan E")(?<=\D)(?=\d):非数字字符后紧跟数字时,中间加空格(比如"Hakan2"→"Hakan 2")(?<=\d)(?=\D):数字后紧跟非数字字符时,中间加空格(比如"2Ev"→"2 Ev")(?<=\))(?=\S):右括号后紧跟非空白字符时,中间加空格(比如")12"→") 12")(?<=\S)(?=\():非空白字符后紧跟左括号时,中间加空格(比如"Ha("→"Ha (")
测试验证
把你的测试输入代入代码,结果完全符合预期:
"Hakan2Ev"→Hakan 2 Ev"Hakan2Ev2"→Hakan 2 Ev 2"Ha2Oy2Het3Magara4"→Ha 2 Oy 2 Het 3 Magara 4"(Ha2Oy2)12"→( Ha 2 Oy 2 ) 12
内容的提问来源于stack exchange,提问作者Eyüp Yetkin
相关产品推荐
相关产品推荐

