避免转义不间断空格和'<','>'

时间:2018-10-19 14:59:13

标签: python escaping

html.unescape()允许取消转义所有HTML实体并完美地工作,但是我需要执行转义操作,但有几个例外:我想使用 nbsp (不间断空格), lt (<)和 gt (>)保持不变。只有这三个实体。

例如,处理此文本

The sensitivity of&nbsp;different micro-organisms to&nbsp;heat varies,
but if&nbsp;water is&nbsp;held at&nbsp;70&nbsp;&deg;C (158&nbsp;&deg;F)
for ten minutes, many organisms are killed &lt;...&gt;.
However, &laquo;Test&raquo; allows...

应该导致

The sensitivity of&nbsp;different micro-organisms to heat varies,
but if water is&nbsp;held at&nbsp;70&nbsp;°C (158&nbsp;°F)
for ten minutes, many organisms are killed &lt;...&gt;.
However, «Test» allows...

是否有实现这一目标的优雅解决方案?我可以使html.unescape()忽略特定的实体吗?

2 个答案:

答案 0 :(得分:1)

scss不允许例外,但是您可以使用html.unescape来完成所需的操作。这是我的解决方案:

re.split

在正则表达式中具有捕获功能的import html import re s = """The sensitivity of&nbsp;different micro-organisms to&nbsp;heat varies, but if&nbsp;water is&nbsp;held at&nbsp;70&nbsp;&deg;C (158&nbsp;&deg;F) for ten minutes, many organisms are killed &lt;...&gt;. However, &laquo;Test&raquo; allows...""" parts = re.split(r'(&nbsp;|&lt;|&gt;)', 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', '&nbsp;')

请注意,此会转义&,因为否则使用'&amp;lt;'的任何输入都将变成'&lt;',这与使用{{1}的输入是无法区分的}(其中'&lt;'部分可以是任何有效的HTML实体减去“&”号)。

演示:

lt;