您当前的位置:首页 > 互联网教程

使用正则表达式来移除HTML标签<>

发布时间:2025-05-21 11:13:11    发布人:远客网络

使用正则表达式来移除HTML标签<>

一、使用正则表达式来移除HTML标签<>

1、此文本中,我们将使用Python的re库对HTML字符串中的标签进行去除,保留标签内的文本。

2、考虑一个由7个元素组成的文本字符串,每个元素包含两个标签,且存在<\a>标签。我们的目标是提取出这些元素的键值对。

3、正则表达式分析:正则表达式中的(.*?)表示非贪婪模式匹配任意字符,只尽可能少地匹配。在默认贪婪模式下,".*"会匹配整个字符串,但使用非贪婪模式".*?"则仅匹配到第一个字符。

4、例如,对于字符串"abc123def456",".*"会匹配整个字符串,而".*?"则匹配第一个字符"a"。非贪婪模式在匹配最短字符串或避免过多字符时极为有用。

5、正则表达式分析:([\s\S]*?)表示匹配任意字符,包括空白和非空白字符,使用非贪婪模式尽可能少地匹配。这在需要匹配最短序列时非常有用,例如字符串"abc\ndef","[\s\S]*"会匹配整个字符串,但"[\s\S]*?"仅匹配到字符"a"。

6、正则表达式<[^>]+>用于匹配一对尖括号之间的内容,即HTML标签,从而去除文本中的HTML标签,保留纯文本内容。

7、例如,对于字符串"Hello, world!",使用<[^>]+>正则表达式,可得到结果"Hello, world!"。

8、re.sub()函数用于在目标字符串中替换所有匹配到的内容,其原型为:re.sub(pattern, repl, string)。

9、使用re.sub()函数,我们可以方便地去除HTML标签,保留文本内容。

二、正则表达式删除指定的HTML 标签

1、抓取某网页的数据后(比如描述),如果照原样显示的话,可能会因为它里面包含没有闭合的HTML标签而打乱了格式,也可能它里面用了比较让人"费解"的HTML标签,把预订的格式搅乱.如果全盘删除里面的 HTML标签,可能会造成阅读上的困难(比如 a, img这些标签),最好是删除一部分,保留一部分.

2、正则表达式里,判断包含某些字符串是非常容易理解的,但是如何判断不包含某些字符串(是字符串,不是字符,是某些,不是某个)确实是个费解的事.

3、(?!((/?\s?li)|(/?\s?ul)|(/?\s?a)|(/?\s?img)|(/?\s?br)|(/?\s?span)|(/?\s?b)))[^]+

4、这个正则是判断HTML标签不包含 li/ ul/ a/ img/ br/ span/ b的,就上面的要求来说,是要删除除这里列出的HTML标签,这也是我摸索了很长时间才搞出来的.

5、(?!exp)匹配后面跟的不是exp的位置

6、/?\s?我一开始试着把它写到最前面的

7、下面是一个简单的函数,把要保留的TAG串起来,生成一个正则表达式,然后把不需要的TAG删除...

8、private static string RemoveSpecifyHtml(string ctx){

9、string[] holdTags={"a","img","br","strong","b","span"};//要保留的 tag

10、//(?!((/?\s?li)|(/?\s?ul)|(/?\s?a)|(/?\s?img)|(/?\s?br)|(/?\s?span)|(/?\s?b)))[^]+

11、string regStr= string.Format(@"(?!((/?\s?{0})))[^]+", string.Join(@")|(/?\s?", holdTags));

12、Regex reg= new Regex(regStr, RegexOptions.Compiled| RegexOptions.Multiline| RegexOptions.IgnoreCase);

13、上面的正则,如果保留了 li,实际运行会发现 link也给保留下来了,保留 a会把 addr也给保留下来,解决办法就是加 \b断言.

14、(?!((/?\s?li\b)|(/?\s?ul)|(/?\s?a\b)|(/?\s?img\b)|(/?\s?br\b)|(/?\s?span\b)|(/?\s?b\b)))[^]+

15、private static string RemoveSpecifyHtml(string ctx){

16、string[] holdTags={"a","img","br","strong","b","span","li"};//保留的 tag

17、//(?!((/?\s?li\b)|(/?\s?ul\b)|(/?\s?a\b)|(/?\s?img\b)|(/?\s?br\b)|(/?\s?span\b)|(/?\s?b\b)))[^]+

18、string regStr= string.Format(@"(?!((/?\s?{0})))[^]+", string.Join(@"\b)|(/?\s?", holdTags));

19、Regex reg= new Regex(regStr, RegexOptions.Compiled| RegexOptions.Multiline| RegexOptions.IgnoreCase);

三、怎样使用正则表达式删除所指定的HTML标签

1、为大家演示一个较为简单的函数吧,这一个函数所要做的事情就是要将保留的TAG通通串起来,然后生成一个正则表达式,接着就要将一些并不需要的TAG通通删除。具体的函数,如图所示:

2、大家可以发现上面这一个正则表达式里面是有bug的,什么bug呢?那就是假如我们将li标签保留了,但是在实际的运行过程中,大家会发现link标签也同样给保留下来了,保留a标签同样也会把addr标签给保留下来了。那么究竟有什么好的修正方法呢?当然有啦,最好的解决方案就是加\\b标签进行断言。具体的实现方法,如图所示: