我有一个像这样的字符串
final String text = "Some Text #AAAA some Other text .." (# with 4 uppercase letters)
Pattern patt = Patter.compile("(.*?)(#)([A-Z]{4})(.*?)");
patt.matcher(text ).replaceAll("$1$3$4")
仅删除文本中的#
我将 AAAA 小写,预期结果:
Some Text aaaa some Other text ..
这个结果怎么会是小写的,只针对四个AAAA?
最佳答案
您必须自己执行appendReplacement
循环,而不是直接使用replaceAll
。我会使用更简单的正则表达式:
Pattern pattern = Pattern.compile("#([A-Z]{4})");
Matcher mat = pattern.matcher(text);
StringBuffer buf = new StringBuffer();
while(mat.find()) {
mat.appendReplacement(buf, mat.group(1).toLowerCase());
}
mat.appendTail(buf);
通常,如果替换字符串可能包含 ,您必须注意
符号或反斜杠,但在本例中我们知道这种情况不会发生,因为第 1 组始终恰好是四个字母。appendReplacement
(和 replaceAll
)并使用 Matcher.quoteReplacement
$
关于java - Pattern.matcher(s).replaceAll ("$1$2$3") 仅将 $2 转换为小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15244483/