删除html实体并使用正则表达式提取文本内容

时间:2014-09-30 18:36:39

标签: regex

我的文字只包含HTML实体,例如< 我需要删除所有内容并获取文字内容:

&nbspHello there<testdata>

因此,我需要从此部分获取Hello theretestdata。有没有办法使用负向前瞻来做这件事?

我尝试了以下内容:/((?!&.+;).)+/ig但这似乎并不是很有效。那么,我怎样才能从那里提取所需的文本?

3 个答案:

答案 0 :(得分:1)

以下是2条建议:

1)使用/(&.+;)/ig匹配所有实体。然后,使用您正在使用的任何编程语言,将这些匹配替换为空字符串。例如,在php中使用preg_replace;在C#中使用Regex.Replace。请参阅此SO,了解更多案例的类似解决方案:How to remove html special chars?

2)如果你真的想使用明文部分这样做,你可以尝试这样的事情:/(?:^|;)([^&;]+)(?:&|$)/ig。它实际上尝试做的是匹配;&之间的部分,以及没有实体的开始和结束的特殊情况。这可能不是可行的方法,你可能会遇到不同的情况。

答案 1 :(得分:0)

查找HTML实体的更好语法是以下正则表达式:

/&([a-z0-9]+|#[0-9]{1,6}|#x[0-9a-f]{1,6});/ig

此语法忽略错误的实体。

答案 2 :(得分:0)

它是特定于语言的,但是在Python中,您可以使用html.unescapeMAN)。喜欢:

import html
print(html.unescape("This string contains & and >"))
#prints: This string contains & and >