我想用他们的同行替换换行符和空格,以便在我的Android应用程序中正确设置样式。
我想知道这个正则表达式的最佳方法。我试图用<br />
替换换行符:
string.replaceAll("@<code>.*\\n*</code>@si", "<br />");
但它没有用。对于替换双倍空间,我无法想出任何东西。
所以这就是我想要实现的目标:
从\n
到<br />
,从“双未编码的空间”到 
。
答案 0 :(得分:13)
在Java中,您可以在2次替换呼叫中执行此操作:
string = string.replaceAll("\\r?\\n", "<br />");
string = string.replace(" ", "  ");
Matcher m = Pattern.compile("(?s)(?i)(?<=<code>)(.+?)(?=</code>)").matcher(string);
StringBuffer buf = new StringBuffer();
while (m.find()) {
String grp = m.group(1).replaceAll("\\r?\\n", "<br />");
grp = grp.replace(" ", "  ");
m.appendReplacement(buf, grp);
}
m.appendTail(buf);
// buf.toString() is your replaced string
我故意在第二次调用中使用String#replace
,因为我们并没有真正使用任何正则表达式。
同样在@amn发表评论时,您可以将字符串包装在<pre>
和</pre>
标记中,并避免这些替换。