使用string.whitespace删除Python中的空格

时间:2009-12-14 02:30:35

标签: python string whitespace

Python的string.whitespace很棒:

>>> string.whitespace
'\t\n\x0b\x0c\r '

如何使用字符串而无需手动输入'\ t | \ n | ...等正则表达式?

例如,它应该能够转: “请不要伤害我。”

“请不要伤害我。”

我可能想要保留单个空格,但是我觉得很容易就去string.whitespace [: - 1]。

5 个答案:

答案 0 :(得分:143)

这个用例确实有一个特例快捷方式!

如果你在没有参数的情况下调用str.split,它会在空格而不是单个字符的运行时分割。所以:

>>> ' '.join("Please \n don't \t hurt \x0b me.".split())
"Please don't hurt me."

答案 1 :(得分:13)

\s字符类有什么问题?

>>> import re

>>> pattern = re.compile(r'\s+')
>>> re.sub(pattern, ' ', "Please \n don't \t hurt \x0b me.")
"Please don't hurt me."

答案 2 :(得分:9)

让我们做一些合理的假设:

(1)你真的想用一个空格(一个长度为1或更长的行)替换任何空格字符的运行。

(2)您希望使用unicode对象在Python 2.X下使用相同的代码进行最小的更改。

(3)您不希望您的代码承担文档中无法保证的内容

(4)您希望使用相同的代码处理Python 3.X str对象的最小更改。

当前选择的答案存在以下问题:

(a)将" " * 3更改为" " * 2,即删除重复的空格,但不删除一式三份,一式四份等空格。 [失败要求1]

(b)将"foo\tbar\tzot"更改为"foobarzot" [未满足要求1]

(c)当输入unicode对象时,得到TypeError: translate() takes exactly one argument (2 given) [失败要求2]

(d)使用string.whitespace[:-1] [未通过要求3; string.whitespace中的字符顺序不保证]

(e)使用string.whitespace[:-1] [未通过要求4;在Python 2.X中,string.whitespace是'\t\n\x0b\x0c\r ';在Python 3.X中,它是'\ t \ n \ r \ x0b \ x0c']

" ".join(s.split())答案和re.sub(r"\s+", " ", s)答案没有这些问题。

答案 3 :(得分:2)

您可以使用翻译方法

import string

s = "Please \n don't \t hurt \x0b me."
s = s.translate(None, string.whitespace[:-1]) # python 2.6 and up
s = s.translate(string.maketrans('',''), string.whitespace[:-1]) # python 2.5, dunno further down
>>> s
"Please  don't  hurt  me."

然后删除重复的空格

s.replace('  ', ' ')
>>> s
"Please don't hurt me."

答案 4 :(得分:1)

一个起点..(虽然它不比手动组装空白马戏团短)..

>>> from string import whitespace as ws
>>> import re

>>> p = re.compile('(%s)' % ('|'.join([c for c in ws])))
>>> s = "Please \n don't \t hurt \x0b me."

>>> p.sub('', s)
"Pleasedon'thurtme."

或者如果你想将空格减少到最多一个:

>>> p1 = re.compile('(%s)' % ('|'.join([c for c in ws if not c == ' '])))
>>> p2 = re.compile(' +')
>>> s = "Please \n don't \t hurt \x0b me."

>>> p2.sub(' ', p1.sub('', s))
"Please don't hurt me."

第三种方式,更紧凑:

>>> import string

>>> s = "Please \n don't \t hurt \x0b me."
>>> s.translate(None, string.whitespace[])
"Pleasedon'thurtme."

>>> s.translate(None, string.whitespace[:5])
"Please  don't  hurt  me."

>>> ' '.join(s.translate(None, string.whitespace[:5]).split())
"Please don't hurt me."