用正则表达式替换HTML标签中的字符
可能重复的问题:
替换所有不属于HTML标签的<和>
- 使用Python
- 我知道大家都不喜欢关于HTML标签的正则表达式问题,但我只是想通过这个练习来帮助我学习正则表达式。
要替换的内容(1可以是任何字符):
<b>< </b>
<b> < </b>
<b> <</b>
<b><</b>
<b><111</b>
<b>11<11</b>
<b>111<</b>
<b>11<11</b>
<b>
<<<
</b>
替换为:
<b>& </b>
<b> & </b>
<b> &</b>
<b>&</b>
<b>&111</b>
<b>11&11</b>
<b>111&</b>
<b>11&11</b>
<b>
&
</b>
我在网上搜索过,尝试了很多自己的解决方案。请问,这可能吗?如果可以的话,怎么做呢?
我最好的猜测是这样的:
re.sub(r'(?<=>)(.*?)<(.*?)(?=</)', r'\1<\2', string)
但在使用re.DOTALL和'<<<'等时,这个方法就不管用了。
4 个回答
0
如果你的字符串是a,这个方法看起来可以用:
re.sub('<+([^b/])','&\\1',a)
还有一个更通用的版本...
re.sub('(<[^<>]+>)([^<>]*)<+([^<>]*)(<[^<>]+>)','\\1\\2&\\3\\4',a)
1
我真心希望这个方法不要在实际的HTML中使用,但这里有一个适合你示例数据的解决方案。请注意,它用的是<
来替换,就像你示例代码中那样,而不是像你示例数据中用的&
。
re.sub(r'<+([^<>]*?)(?=</)', r'<\1', your_string)
0
你可以使用类似这样的代码:
re.sub(r'(?:<(?!/?b>))+', '&', string)
如果你想让它也能和其他一些标签一起工作,可以使用类似这样的代码:
re.sub(r'(?:<(?!/?\w+[^<>]*>))+', '&', string)