gpt4 book ai didi

java - 正则表达式删除多个 html 嵌套标签

转载 作者:行者123 更新时间:2023-12-01 22:39:35 26 4
gpt4 key购买 nike

我有 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>

因此,全部下划线应该将 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);

最佳答案

如果您放宽问题以允许多轮替换(如卡西米尔所说),并假设输入中不允许使用 # 字符,则类似以下内容可能会有所帮助:

String test = "<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>";

String solution = test.replaceAll("<b>([a-z]*)</b>", "#$1#").replaceAll("(<b>|</b>)", "").replaceAll("#(.*)#", "<b>$1</b>").replaceAll("#", ""));

关于java - 正则表达式删除多个 html 嵌套标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26402877/

26 4 0