【发布时间】:2014-12-11 17:31:21
【问题描述】:
我的 html 刺痛如下:
<p dir="ltr">hello boys <b><b><b><b><b><b><b><b><b>n</b></b></b></b></b></b></b></b></b><b><b><b><b><b><b><b><b>o</b></b></b></b></b></b></b></b><b><b><b><b><b><b><b>w</b></b></b></b></b></b></b><b><b><b><b><b><b> </b></b></b></b></b></b><b><b><b><b><b>b</b></b></b></b></b><b><b><b><b>o</b></b></b></b><b><b><b>l</b></b></b><b><b>d</b></b><b> </b></p>
我想保留<p dir="ltr">标签,一个包含所有单个粗体字符的<b></b>。
结果应该是:
<p dir="ltr">hello boys <b>now bold</b></p>
<b></b>的数量不会固定
在 Java 中可以遵循什么正则表达式来做同样的事情。除了粗体,斜体和下划线也会出现
如果文本同时包含粗体、斜体和下划线这 3 种格式,则生成的 html 为:
<p dir="ltr"><b><b><b><b>bold</b></b></b></b> <i><i><i><i><i><i><i><i>italic</i></i></i></i></i></i></i></i><i> </i>normal <u><u><u><u><u><u><u><u>underline</u></u></u></u></u></u></u></u> <b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b>all</b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b> </b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><u><b>together</b></u></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></p>
应用 traianus 建议的正则表达式后,输出变为(我已应用粗体、斜体和下划线的格式):
<p dir="ltr"><b>bold</b> <i>italic</i> normal <u>underline all together</u></p>
因此,underline all together 应该将 b、i 和 u 标签放在一起以显示正确的格式。
代码:
String htmlString=Html.toHtml(mainEditText.getText());
String boldRemoval = htmlString.replaceAll("<b>([a-z]*)</b>", "#$1#").replaceAll("(<b>|</b>)", "").replaceAll("#(.*)#", "<b>$1</b>").replaceAll("#", "");
String italicRemoval = boldRemoval.replaceAll("<i>([a-z]*)</i>", "#$1#").replaceAll("(<i>|</i>)", "").replaceAll("#(.*)#", "<i>$1</i>").replaceAll("#", "");
String underlineRemoval = italicRemoval.replaceAll("<u>([a-z]*)</u>", "#$1#").replaceAll("(<u>|</u>)", "").replaceAll("#(.*)#", "<u>$1</u>").replaceAll("#", "");
Log.d("solution", underlineRemoval);
【问题讨论】:
-
你不能。使用 html 解析器从父 b 标签和连续 b 标签中提取文本内容,然后连接和替换。
-
@CasimiretHippolyte 任何示例代码或教程都会有很大帮助
-
这是正则表达式的错误用例。我认为 jsoup 可能是您正在寻找的。span>
-
@nerdwaller 怎么办?
标签: java html regex formatting