我有一个这样的字符串final String text =“一些文本#AAAA一些其他文本..”(#带有4个大写字母)
Pattern patt = Patter.compile("(.*?)(#)([A-Z]{4})(.*?)"); patt.matcher(text ).replaceAll("$1$3$4")
仅删除 text 中的#我会输入小写的 AAAA,预期结果为:一些文本 aaaa 一些其他文本..这个结果怎么会用小写,只为四个 AAAA?
#
ui7jx7zq1#
您将不得不自己执行appendReplacement循环,而不是直接使用replaceAll。我将使用一个更简单的正则表达式:
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);
通常你必须注意appendReplacement(和replaceAll),如果替换字符串可能包含$符号或反斜杠,则使用Matcher.quoteReplacement,但在这种情况下,我们知道这不可能发生,因为组1总是正好四个字母。
$
Matcher.quoteReplacement
rn0zuynd2#
这将起作用:
Matcher matcher = patt.matcher(text); matcher.matches(); String res = matcher.group(1) + matcher.group(3).toLowerCase() + matcher.group(4);
a0zr77ik3#
这里有一条线:
String text2 = text.replaceFirst("(?<=#)[A-Z]{4}", text.replaceAll(".*?#([A-Z]{4}).*", "$1").toLowerCase());
举你例子:
final String text = "Some Text #AAAA some Other text .."; String text2 = text.replaceFirst("(?<=#)[A-Z]{4}", text.replaceAll(".*?#([A-Z]{4}).*", "$1").toLowerCase()); System.out.println(text2);
将输出:
Some Text #aaaa some Other text ..
uwopmtnx4#
试试这个:
public static void main (String args[]) { String matched = ""; Pattern pattern = Pattern.compile("(.*?)(#)([A-Z]{4})(.*?)"); Matcher matcher = pattern.matcher("Some Text #AAAA some Other text"); if (matcher.find()) { matched = matcher.group(1) + matcher.group(3).toLowerCase() + matcher.group(4); } System.out.println(matched); }
piwo6bdm5#
引用Matcher.replaceAll() API页面中的内容:请注意,替换字符串中的反斜杠(\)和美元符号($)可能导致结果与将其视为文字替换字符串时的结果不同。美元符号可能被视为对捕获的子序列的引用。这听起来就像你面临的问题...
Matcher.replaceAll()
\
5条答案
按热度按时间ui7jx7zq1#
您将不得不自己执行
appendReplacement
循环,而不是直接使用replaceAll
。我将使用一个更简单的正则表达式:通常你必须注意
appendReplacement
(和replaceAll
),如果替换字符串可能包含$
符号或反斜杠,则使用Matcher.quoteReplacement
,但在这种情况下,我们知道这不可能发生,因为组1总是正好四个字母。rn0zuynd2#
这将起作用:
a0zr77ik3#
这里有一条线:
举你例子:
将输出:
uwopmtnx4#
试试这个:
piwo6bdm5#
引用
Matcher.replaceAll()
API页面中的内容:请注意,替换字符串中的反斜杠(
\
)和美元符号($
)可能导致结果与将其视为文字替换字符串时的结果不同。美元符号可能被视为对捕获的子序列的引用。这听起来就像你面临的问题...