是否有表达式可以获取两个HTML标记之间的值?
鉴于此:
<td class="played">0</td>
我正在寻找一个表达式,它会返回0
,剥离<td>
标签。
答案 0 :(得分:122)
您不应尝试使用正则表达式解析HTML。 HTML不是常规语言,因此您提出的任何正则表达式都可能在某些深奥的边缘情况下失败。有关详细信息,请参阅this question的开创性答案。虽然大部分格式化为一个笑话,但它是一个非常好的观点。
以下示例是Java,但正则表达式与其他语言类似(如果不相同)。
String target = someString.replaceAll("<[^>]*>", "");
假设您的非HTML不包含任何&lt;或者&gt;并且输入字符串的结构正确。
如果您知道它们是特定标记 - 例如您知道文本只包含<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替换为单个空格,然后折叠空白,然后修剪任意两端。
答案 1 :(得分:44)
一个简单的方法是替换
<[^>]*>
什么也没有。但是,根据你的输入结构错误,可能会失败。
答案 2 :(得分:3)
你可以用jsoup http://jsoup.org/
来做Whitelist whitelist = Whitelist.none();
String cleanStr = Jsoup.clean(yourText, whitelist);