替换(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和'&lt;&lt;&lt;'等等分开了。
答案 0 :(得分:0)
我真诚地希望从未在实际的HTML上使用过,但这是一个适用于您的示例数据的解决方案。请注意,它会替换为示例代码中的<
,而不是样本数据中的&
。
re.sub(r'<+([^<>]*?)(?=</)', r'<\1', your_string)
答案 1 :(得分:-1)
如果a是你的字符串,这似乎有效:
re.sub('<+([^b/])','&\\1',a)
和第二个版本,更通用......
re.sub('(<[^<>]+>)([^<>]*)<+([^<>]*)(<[^<>]+>)','\\1\\2&\\3\\4',a)
答案 2 :(得分:-1)
您可以使用以下内容:
re.sub(r'(?:<(?!/?b>))+', '&', string)
如果您希望它与(某些)其他标签一起使用,您可以使用以下内容:
re.sub(r'(?:<(?!/?\w+[^<>]*>))+', '&', string)
答案 3 :(得分:-1)
此测试的正则表达式适用于您给定的测试数据:
reobj = re.compile(r"""
# Match left angle brackets not part of HTML tag.
<+ # One or more < but only if
(?=[^<>]*</\w+) # inside HTML element contents.
""", re.VERBOSE)
result = reobj.sub("&", subject)