所以我有一根绳子
2000 for车辆翻新发动机
我想把这个变成
2000 for车辆翻新发动机
2000毫升上有大写字母cc。我显然不能做text.replaceAll("cc","CC");,因为它将用大写版本替换cc的所有出现,因此单词加速器将变成aCCelerator。在我的场景中,前面的四个数字总是四位,后面跟着字母cc,所以我认为这可以用regex来完成。
我的问题是,在Java中,当cc跟随4位数并获得预期的结果时,如何将CC转换为CC?
String text = text.replaceAll("[0-9]{4}[c]{2}", "?");发布于 2014-02-11 17:16:40
如果您只需将cc转换为大写,并且它是固定的,那么您只需将匹配替换为CC。
在Java中没有这方面的单行通用解决方案。你必须用Matcher#appendReplacement()和Matcher#appendTail()做这件事
String str = "Refurbished Engine for 2000cc Vehicles";
Pattern pattern = Pattern.compile("\\d{4}cc");
Matcher matcher = pattern.matcher(str);
StringBuffer result = new StringBuffer();
while (matcher.find()) {
matcher.appendReplacement(result, matcher.group().toUpperCase());
}
matcher.appendTail(result);
System.out.println(result.toString());发布于 2014-02-11 17:14:38
你可以试试
text = text.replaceAll("(\\d{4})cc", "$1CC");
// ↓ ↑
// +→→→→→→→→→→+技巧是将数字放在组中(通过括号),然后在替换部分(通过$x,x是组号)中使用此组中的匹配。
如果希望确保匹配的文本不是其他单词的一部分,则可以使用字界 "\\b"包围该正则表达式。还可以使用看-阿登机制来确保匹配文本之前和/或之后没有字母数字字符。
发布于 2014-02-11 17:15:18
一种方法是将数字部分捕获为带有()的组,然后在替换中使用对该组的反向引用:
这是经过测试的:
public static void main(String [] args) {
String s = "1000cc abc 9999cc";
String t = s.replaceAll("(\\d{4})cc", "$1CC");
System.err.println(t);
}https://stackoverflow.com/questions/21708412
复制相似问题