可能重复:
删除 HTML 标记的正则表达式
是否有一个表达式可以获取两个 HTML 标签之间的值?
鉴于这种:
<td class="played">0</td>
我正在寻找一个将返回的表达式0
,剥离<td>
标签。
可能重复:
删除 HTML 标记的正则表达式
是否有一个表达式可以获取两个 HTML 标签之间的值?
鉴于这种:
<td class="played">0</td>
我正在寻找一个将返回的表达式0
,剥离<td>
标签。
您不应尝试使用正则表达式解析 HTML。HTML 不是常规语言,因此您提出的任何正则表达式都可能在某些深奥的边缘情况下失败。有关详细信息,请参阅此问题的开创性答案。虽然大多被格式化为一个笑话,但它提出了一个非常好的观点。
以下示例是 Java,但对于其他语言,正则表达式将是相似的——如果不相同的话。
String target = someString.replaceAll("<[^>]*>", "");
假设您的非 html 不包含任何 < 或 > 并且您的输入字符串结构正确。
如果你知道它们是一个特定的标签——例如你知道文本只包含<td>
标签,你可以这样做:
String target = someString.replaceAll("(?i)<td[^>]*>", "");
编辑:Ωmega 在另一篇文章的评论中提出了一个很好的观点,即如果有多个标签,这将导致多个结果全部被挤压在一起。
例如,如果输入字符串是<td>Something</td><td>Another Thing</td>
,那么上面的结果将是SomethingAnother Thing
。
在需要多个标签的情况下,我们可以执行以下操作:
String target = someString.replaceAll("(?i)<td[^>]*>", " ").replaceAll("\\s+", " ").trim();
这会将 HTML 替换为一个空格,然后折叠空格,然后修剪末尾的任何空格。
一个简单的方法是替换
<[^>]*>
一无所有。但是,根据您的输入结构的不良程度,这很可能会失败。
你可以用 jsoup http://jsoup.org/
Whitelist whitelist = Whitelist.none();
String cleanStr = Jsoup.clean(yourText, whitelist);