如何用HTML实体替换标点符号

时间:2013-07-05 23:25:55

标签: python string ascii

我想将,'".<>?;:等字符串中的标点符号部分替换为相应的HTML实体&#44;&#39;&#34;&#60;&#62;&#59;&#58;。到目前为止,我已经考虑将string库与.maketransstring.punctuation一起使用。您似乎可以将ascii转换为string(但不是相反。根据我迄今为止发现的内容)。在解决方案之后,我不需要编写RegEx(试图不重新发明轮子)。

3 个答案:

答案 0 :(得分:1)

你可以自己分别转换每个角色。

例如:

def htmlentities(string):
  def char_htmlentities(c):
    return '&#%d;' % ord(c) if c in html_symbols else c

  html_symbols =  set(',\'".<>?;:')
  return ''.join(map(char_htmlentities, string))
UPD:我将解决方案重写为线性而非时间复杂度的二次方

答案 1 :(得分:1)

正则表达式解决方案可能是最简单的,因为您可以只使用一次re.sub()调用。

import re
def htmlentities(s):
    return re.sub('[,\'".<>?;:]',
                  lambda m: return '#%d;' % m.group(0),
                  s)

答案 2 :(得分:1)

sasha的代码在我看来有两个缺点:

  • 每次char_htmlentities()中的字符调用map(char_htmlentities,string)时,它都会执行以下操作:test if c in html_symbols,compute ord(c),compute {{1} }

  • 每次在新字符串上调用&#%d;' % ord(c)时,都会再次创建函数htmlentities()

更好的方法是创建一个字典并将其设为默认值char_htmlentities(),如下面的代码所示:

htmlentities()