用 <br/> 替换换行符,在 <code> 标记内用 替换空格
Posted
技术标签:
【中文标题】用 <br/> 替换换行符,在 <code> 标记内用 替换空格【英文标题】:Replace newline with <br/> and spaces with   inside <code> tags 【发布时间】:2013-06-19 15:00:55 【问题描述】:我想用对应的换行符和空格替换它们,以便它们在我的 android 应用程序中正确设置样式。
我想知道这个正则表达式的最佳方法。我尝试这样做以用 <br />
替换换行符:
string.replaceAll("@<code>.*\\n*</code>@si", "<br />");
但它没有用。对于双倍空间的替换,我还没有想出任何办法。
所以这就是我想要实现的目标:
从\n
到<br />
,从“双未编码空间”到&emsp;
。
【问题讨论】:
你不能只使用PRE
标签吗?这就是它的用途,有点。
您可以尝试这里描述的 Apache Commons Lang 库:***.com/questions/1265282/…
@amn 这是一个Android Textview,不支持pre
标签。
【参考方案1】:
在 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>
标记中,并避免这些替换。
【讨论】:
我需要正则表达式只作用于 标记,而不是整个字符串。
好的,现在试试。如果您可以提供输入字符串的示例值,这将有所帮助。
这行得通,但有一个问题。我丢失了字符串中的<code>
标签。是什么原因造成的?
哦,我以为你想去掉代码标签。这就是为什么我没有捕捉到它。让我编辑一下。以上是关于用 <br/> 替换换行符,在 <code> 标记内用 替换空格的主要内容,如果未能解决你的问题,请参考以下文章