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