正则表达式从字符串中删除HTML标记

dan*_*nny 73 html regex

可能重复:
正则表达式以删除HTML标记

是否有一个表达式可以获取两个HTML标记之间的值?

鉴于这种:

<td class="played">0</td>
Run Code Online (Sandbox Code Playgroud)

我正在寻找一个表达式,它将返回0,剥离<td>标签.

Rod*_*eas 139

您不应尝试使用正则表达式解析HTML.HTML不是常规语言,因此您提出的任何正则表达式都可能在某些深奥的边缘情况下失败.有关详细信息,请参阅此问题的开创性答案.虽然大多数格式化为一个笑话,但它是一个非常好的观点.


以下示例是Java,但正则表达式与其他语言类似(如果不相同).


String target = someString.replaceAll("<[^>]*>", "");
Run Code Online (Sandbox Code Playgroud)

假设你的非html不包含任何<或>,并且输入字符串的结构正确.

如果您知道它们是特定标记 - 例如,您知道文本只包含<td>标记,则可以执行以下操作:

String target = someString.replaceAll("(?i)<td[^>]*>", "");
Run Code Online (Sandbox Code Playgroud)

编辑:Ωmega在另一篇帖子的评论中提出了一个很好的观点,即如果有多个标签,这会导致多个结果被挤压在一起.

例如,如果输入字符串是<td>Something</td><td>Another Thing</td>,那么上面的结果将导致SomethingAnother Thing.

在需要多个标签的情况下,我们可以执行以下操作:

String target = someString.replaceAll("(?i)<td[^>]*>", " ").replaceAll("\\s+", " ").trim();
Run Code Online (Sandbox Code Playgroud)

这将HTML替换为单个空格,然后折叠空白,然后修剪任何结尾.

  • 这里的要点是返回匹配.如果字符串中有更多的数学,您将它们合并为一个混乱字符串.示例:`<div> text </ div> <p> here </ p>`.得到它了? (5认同)
  • OP说:“我正在寻找一个表达式,该表达式将返回0,剥离&lt;td&gt;标签。” 该帖子的标题是“从字符串中删除html标签的正则表达式”。我去掉了&lt;td&gt;标签。在OP中没有任何地方提及模式* matching *。 (3认同)
  • @ Netsi1964 - 实际上我的例子是Java并且在字符串上执行.我在答案中添加了一个注释,表明了这一点. (2认同)

Joe*_*oey 52

一个微不足道的方法是取代

<[^>]*>
Run Code Online (Sandbox Code Playgroud)

没有.但取决于你的输入结构不合理,可能会失败.

  • 没错.确实.但是给定`<b> a </ b> <i> b </ i>`结果`ab`是可以预期的.所以这不是你可以轻易决定的事情.此外,在浏览器中查看XML会导致相同,将所有文本节点折叠在一起. (5认同)

mih*_*imi 5

您可以使用jsoup http://jsoup.org/

Whitelist whitelist = Whitelist.none();
String cleanStr = Jsoup.clean(yourText, whitelist);
Run Code Online (Sandbox Code Playgroud)

  • JSoup是一个非常酷的库,但是除非OP计划做更多的事情,而不仅仅是他在原始帖子中描述的简单替换,否则它可能是一个相当沉重的解决方案。 (10认同)