我正在尝试使用以下语句在我的字符串中添加几个垃圾字符:
desc = string.replace(desc,'“','"')
desc = string.replace(desc,'”','"')
desc = string.replace(desc,'·','.')
我可以将上述3个陈述写入单个陈述中,或将前两个陈述发送给单一陈述。
我不能在我的项目中使用任何第三方库。
编辑@unutbu:
我的字符串如下所示:
这是
'“' my teststring '”'.
我想用适当的HTML替换unicode,而不是用unicode值替换整个字符串。
使用代码后:
import HTMLParser
text='“ ” ·'
parser=HTMLParser.HTMLParser()
desc=parser.unescape(text)
我只获取HTML等价物,而不是字符串。但我只想替换适当的值,保留原始字符串中的所有内容。
我希望如下所示:
这是“我的测试字符串”。我想用适当的HTML替换unicode,而不是用unicode值替换整个字符串。
答案 0 :(得分:4)
HTMLParser位于标准库中:
import HTMLParser
text='“ ” ·'
parser=HTMLParser.HTMLParser()
desc=parser.unescape(text)
print(desc)
# “ ” ·
如果你想在一个声明中,你当然可以
desc=HTMLParser.HTMLParser().unescape(text)
但如果您需要在多个地方调用unescape
,这可能不是一个优势,一般来说,链接这样的调用会更难确定异常发生的位置。
请注意,HTMLParser.unescape
将取消htmlentitydefs.names2codepoint
中定义的所有 HTML实体(加'
)。
编辑:HTMLParser.unescape返回的字符与您发布的字符不同。 要准确获取这些字符,您可以使用xml.sax.saxutils:
text='“ ” ·'
import xml.sax.saxutils as saxutils
print(saxutils.unescape(text,{'“':'"', '”':'"', '·':'.', }))
# " " .
请注意,saxutils.unescape
也会替换<
,>
和&
。如果您只想替换“
,”
和·
,那么我会使用aix's answer。
答案 1 :(得分:3)
前两个可以使用正则表达式一起完成:
desc = re.sub('&[rl]dquo;', '"', desc)
如果您预见到有许多这样的模式,您可以将它们放入字典并循环应用:
patterns = {'&[rl]dquo;': '"',
'·': '.'}
for pattern, repl in patterns.items():
desc = re.sub(pattern, repl, desc)
与原始代码一样,由于它会多次扫描字符串,因此对于较长的desc
,这不能很好地扩展。这是一个可扩展的版本,只扫描一次字符串:
import re
subs = {'rdquo': '"',
'ldquo': '"',
'middot': '.'}
def repl(matchobj):
return subs.get(matchobj.group(1), matchobj.group(0))
desc = 'sdf sdfs “ sdf sd “ skdfh · sdf &nonsub; jk'
print re.sub('&(.*?);', repl, desc)
答案 2 :(得分:0)
从 Python 3.4 开始,我们现在可以做
import html
text='“ ” ·'
desc=html.unescape(text)
print(desc) # “ ” ·