html.unescape()
允许取消转义所有HTML实体并完美地工作,但是我需要执行转义操作,但有几个例外:我想使用 nbsp (不间断空格), lt (<)和 gt (>)保持不变。只有这三个实体。
例如,处理此文本
The sensitivity of different micro-organisms to heat varies,
but if water is held at 70 °C (158 °F)
for ten minutes, many organisms are killed <...>.
However, «Test» allows...
应该导致
The sensitivity of different micro-organisms to heat varies,
but if water is held at 70 °C (158 °F)
for ten minutes, many organisms are killed <...>.
However, «Test» allows...
是否有实现这一目标的优雅解决方案?我可以使html.unescape()
忽略特定的实体吗?
答案 0 :(得分:1)
scss
不允许例外,但是您可以使用html.unescape
来完成所需的操作。这是我的解决方案:
re.split
在正则表达式中具有捕获功能的import html
import re
s = """The sensitivity of different micro-organisms to heat varies,
but if water is held at 70 °C (158 °F)
for ten minutes, many organisms are killed <...>.
However, «Test» allows..."""
parts = re.split(r'( |<|>)', s)
for i, part in enumerate(parts):
if i % 2 == 0:
parts[i] = html.unescape(parts[i])
print("".join(parts))
不仅会拆分,还将定界符保留在输出列表中。并且我们将所有其他元素带到re.split
可以避免您想要作为异常的特定标记。您可以看到Partitioning a string in Python by a regular expression来获取html.unescape
的工作方式示例。
答案 1 :(得分:0)
否,html.unescape()
是不可配置的。我只是使用html.escape()
进行转义,再加上U + 00A0 NO-BREAK SPACE代码点的手动转换:
import html
def reescape(s):
return html.escape(html.unescape(s)).replace('\xa0', ' ')
请注意,此还会转义&
,因为否则使用'&lt;'
的任何输入都将变成'<'
,这与使用{{1}的输入是无法区分的}(其中'<'
部分可以是任何有效的HTML实体减去“&”号)。
演示:
lt;