Python的string.whitespace很棒:
>>> string.whitespace
'\t\n\x0b\x0c\r '
如何将其与字符串一起使用,而无需手动键入'\t|\n|...正则表达式等?
例如,它应该能够转向:“请不要伤害我。”
转到
“请不要伤害我”
我可能想保留单个空格,但只使用字符串就足够简单了。
发布于 2009-12-14 11:59:41
对于这个用例,有一个特殊情况下的快捷方式!
如果在不带参数的情况下调用str.split
,它将在一系列空格上拆分,而不是在单个字符上拆分。所以:
>>> ' '.join("Please \n don't \t hurt \x0b me.".split())
"Please don't hurt me."
发布于 2009-12-14 12:29:39
\s
字符类有什么问题?
>>> import re
>>> pattern = re.compile(r'\s+')
>>> re.sub(pattern, ' ', "Please \n don't \t hurt \x0b me.")
"Please don't hurt me."
发布于 2009-12-14 18:09:27
让我们做一些合理的假设:
(1)您确实希望用一个空格替换任何一串空格字符(一个空格的长度为1或更长)。
(2)您希望相同的代码在Python 2.X下使用unicode对象进行最小程度的更改。
(3)您不希望您的代码假定文档中没有保证的内容
(4)您希望在Python3.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;在Python2.x中,string.whitespace是'\t\n\x0b\x0c\r '
;在Python3.x中,它是‘\t\n\r\x0b\x0c’
" ".join(s.split())
答案和re.sub(r"\s+", " ", s)
答案没有这些问题。
https://stackoverflow.com/questions/1898656
复制相似问题