130

我正在尝试在 Linux 上删除 python 2.7 中的所有空格/制表符/换行符。

我写了这个,应该做的工作:

myString="I want to Remove all white \t spaces, new lines \n and tabs \t"
myString = myString.strip(' \n\t')
print myString

输出:

I want to Remove all white   spaces, new lines 
 and tabs

这似乎是一件简单的事情,但我在这里缺少一些东西。我应该进口一些东西吗?

4

8 回答 8

155

str.split([sep[, maxsplit]])与 nosep或一起使用sep=None

来自文档

如果sep未指定或 is None,则应用不同的拆分算法:连续空格的运行被视为单个分隔符,如果字符串具有前导或尾随空格,则结果将在开头或结尾不包含空字符串。

演示:

>>> myString.split()
['I', 'want', 'to', 'Remove', 'all', 'white', 'spaces,', 'new', 'lines', 'and', 'tabs']

在返回的列表上使用str.join以获得此输出:

>>> ' '.join(myString.split())
'I want to Remove all white spaces, new lines and tabs'
于 2012-05-22T22:42:54.763 回答
67

如果要删除多个空白项并用单个空格替换它们,最简单的方法是使用如下正则表达式:

>>> import re
>>> myString="I want to Remove all white \t spaces, new lines \n and tabs \t"
>>> re.sub('\s+',' ',myString)
'I want to Remove all white spaces, new lines and tabs '

然后,您可以根据需要删除尾随空格.strip()

于 2012-05-22T22:40:43.157 回答
21

使用re

import re
myString = "I want to Remove all white \t spaces, new lines \n and tabs \t"
myString = re.sub(r"[\n\t\s]*", "", myString)
print myString

输出:

我想删除所有空格、换行符和制表符

于 2017-12-30T16:36:26.000 回答
13
import re

mystr = "I want to Remove all white \t spaces, new lines \n and tabs \t"
print re.sub(r"\W", "", mystr)

Output : IwanttoRemoveallwhitespacesnewlinesandtabs
于 2012-12-31T11:32:23.070 回答
13

这只会删除制表符、换行符、空格等。

import re
myString = "I want to Remove all white \t spaces, new lines \n and tabs \t"
output   = re.sub(r"[\n\t\s]*", "", myString)

输出:

Iwanto 删除所有空格、换行符和制表符

再会!

于 2017-12-12T09:49:51.490 回答
7

上述建议使用正则表达式的解决方案并不理想,因为这是一项如此小的任务,并且正则表达式需要更多的资源开销,而不是任务的简单性所证明的合理性。

这就是我所做的:

myString = myString.replace(' ', '').replace('\t', '').replace('\n', '')

或者如果你有一堆东西要删除,这样单行解决方案就会无缘无故地长:

removal_list = [' ', '\t', '\n']
for s in removal_list:
  myString = myString.replace(s, '')
于 2019-05-01T20:09:55.150 回答
2

在连接中使用列表理解的单线如何?

>>> foobar = "aaa bbb\t\t\tccc\nddd"
>>> print(foobar)
aaa bbb                 ccc
ddd

>>> print(''.join([c for c in foobar if c not in [' ', '\t', '\n']]))
aaabbbcccddd
于 2020-09-30T14:11:04.557 回答
2

由于没有其他更复杂的东西,我想分享这个,因为它帮助了我。

这是我最初使用的:

import requests
import re

url = 'https://stackoverflow.com/questions/10711116/strip-spaces-tabs-newlines-python' # noqa
headers = {'user-agent': 'my-app/0.0.1'}
r = requests.get(url, headers=headers)
print("{}".format(r.content))

不希望的结果:

b'<!DOCTYPE html>\r\n\r\n\r\n    <html itemscope itemtype="http://schema.org/QAPage" class="html__responsive">\r\n\r\n    <head>\r\n\r\n        <title>string - Strip spaces/tabs/newlines - python - Stack Overflow</title>\r\n        <link

这就是我将其更改为:

import requests
import re

url = 'https://stackoverflow.com/questions/10711116/strip-spaces-tabs-newlines-python' # noqa
headers = {'user-agent': 'my-app/0.0.1'}
r = requests.get(url, headers=headers)
regex = r'\s+'
print("CNT: {}".format(re.sub(regex, " ", r.content.decode('utf-8'))))

期望的结果:

<!DOCTYPE html> <html itemscope itemtype="http://schema.org/QAPage" class="html__responsive"> <head> <title>string - Strip spaces/tabs/newlines - python - Stack Overflow</title>

@MattH 提到的精确正则表达式对我来说是适合我的代码的。谢谢!

注意:这是python3

于 2019-05-15T06:54:50.347 回答