在Python 2.x中去除特定标点符号

1 投票
6 回答
2268 浏览
提问于 2025-04-17 10:12

我正在使用Python 2.6,并且有一个字符串,其中包含一些我想去掉的标点符号。现在我查看了string.punctuation()这个函数,但不幸的是,我想去掉所有的标点符号,除了句号和破折号。总共我只想去掉5个标点符号 - ()\"'

有什么建议吗?我希望这是最有效的方法。

谢谢

6 个回答

1

使用 string.translate 方法:

s = ''' abc(de)f\gh"i' '''
print(s.translate(None, r"()\"'"))
 # abcdefghi 

或者可以用 re.sub 方法:

import re
re.sub(r"[\\()'\"]",'',s)

不过,string.translate 看起来要快很多:

In [148]: %timeit (s*1000).translate(None, r"()\"'")
10000 loops, best of 3: 112 us per loop

In [146]: %timeit re.sub(r"[\\()'\"]",'',s*1000)
100 loops, best of 3: 2.11 ms per loop
1
>>> import re
>>> r = re.compile("[\(\)\\\\'\"]")
>>> r.sub("", "\"hello\" '(world)'\\\\\\")
'hello world'

当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。

1

你可以使用 str.translate(table[, deletechars]) 这个方法,把 table 设置为 None,这样就会把字符串中所有在 deletechars 里列出的字符都删除掉:

s.translate(None, r"()\"'")

下面是一些例子:

>>> "\"hello\" '(world)'".translate(None, r"()\"'")
'hello world'
>>> "a'b c\"d e(f g)h i\\j".translate(None, r"()\"'")
'ab cd ef gh ij'

撰写回答