我可以在python的一个语句中做一些字符串替换

时间:2011-09-15 08:55:05

标签: python string replace

我正在尝试使用以下语句在我的字符串中添加几个垃圾字符:

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值替换整个字符串。

3 个答案:

答案 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也会替换<>&。如果您只想替换“”&middot,那么我会使用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)  # “ ” ·