如何在介词前添加空格?处理WordsofWisdom字符串的正则问题
解决办法:给'WordsofWisdom'里的'of'前加空格
嘿,这问题很容易搞定!你原来的正则是用来在非下划线后的大写字母前加空格,所以它能把Wisdom的W前面拆开,但管不到小写的of部分。要在of前也加上空格,可以分两种方式实现:
方式一:分步替换(清晰直观)
先单独处理of的情况,再用你原来的正则处理大写字母的拆分,代码如下:
String originalStr = "WordsofWisdom"; // 第一步:在单词字符后的'of'前加空格 String afterOfFix = originalStr.replaceAll("(?<=\\w)(of)", " $1"); // 第二步:用你原来的规则拆分大写字母开头的单词 String finalResult = afterOfFix.replaceAll("([^_])([A-Z])", "$1 $2"); // 输出结果:Words of Wisdom
这里的(?<=\\w)(of)是正向预查,意思是只匹配前面跟着字母/数字/下划线的of,避免误匹配字符串开头的of。
方式二:一步到位的正则
如果想省一步,可以把两个规则合并成一个正则,一次替换完成:
String originalStr = "WordsofWisdom"; String finalResult = originalStr.replaceAll("(?<=\\w)(of)|([^_])([A-Z])", "$1$2 $3"); // 输出结果:Words of Wisdom
这个正则用|分隔了两种匹配场景:
- 第一种场景:
(?<=\\w)(of),负责给of前加空格 - 第二种场景:
([^_])([A-Z]),就是你原来的规则,给大写字母前加空格
替换时$1$2会对应两种场景里的匹配内容,再加上空格和对应的分组,就能一次完成所有拆分啦。
内容的提问来源于stack exchange,提问作者krystal
相关产品推荐
相关产品推荐

