Java 正则表达式转大写

标签 java regex

所以我有一个像

这样的字符串

Refurbished Engine for 2000cc Vehicles

我想把它变成

Refurbished Engine for 2000CC Vehicles

在 2000CC 上使用大写字母 cc。我显然不能执行 text.replaceAll("cc","CC"); 因为它会将所有出现的 cc 替换为大写版本,因此单词加速器将变成 aCCelerator。在我的场景中,前四位数字始终是四位数字后跟字母 cc,所以我认为这可以使用正则表达式来完成。

我的问题是,在 Java 中,当 cc 跟在 4 位数字之后时,如何将它转换为 CC 并获得我期望的上述结果?

String text = text.replaceAll("[0-9]{4}[c]{2}", "?");

最佳答案

你可以试试

text = text.replaceAll("(\\d{4})cc", "$1CC");
//                          ↓          ↑
//                          +→→→→→→→→→→+

技巧是将数字放在组中(通过括号),然后在替换部分中使用来自该组的匹配项(通过 $x,其中 x 是组号)。

您可以用 word boundaries 包围该正则表达式"\\b" 如果您想确保匹配的文本不是其他单词的一部分。您也可以使用 look-adound确保匹配文本之前和/或之后没有字母数字字符的机制。

关于Java 正则表达式转大写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21708412/

相关文章:

ruby - 安装 RDoc 文档时出错 : incompatible encoding regexp match

java - 如何创建 onitemclick 监听器以打开另一个 ListView

java - Spring-WS项目创建

java - java中的对象图是什么?

regex - 如何将正则表达式中的方括号与 grep 匹配?

arrays - 在 MATLAB regexpr 中使用数组项作为替换

c# - 具有最大长度的 float 的正则表达式

Java多线程-等待条件并释放所有线程

Java时间戳unicode问题

javascript - 正则表达式从缩小中排除 npm 库