空格/制表符/新行-python

我试图删除 Linux 上 python 2.7中的所有空格/tab/newline。

我写了这个,应该可以了:

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

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

270500 次浏览

如果要删除多个空格项并用单个空格替换它们,最简单的方法是使用 regexp,如下所示:

>>> 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()删除尾随空间。

使用没有 sepsep=Nonestr.split([sep[, maxsplit]]):

来自 医生:

如果未指定 sepNone,则使用不同的分割算法 运行的连续空格被视为单个 分隔符,并且结果在开始时不包含空字符串 如果字符串具有前导空格或尾随空格,则使用。

演示:

>>> 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'
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

这只会删除选项卡、换行符、空格等内容。

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)

输出:

我想删除所有的空格、新行和标签

再见!

使用 是的

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

产出:

我想删除所有的空格、新行和标签

上述建议使用正则表达式的解决方案并不理想,因为这是一个非常小的任务,而且正则表达式所需的资源开销超过了任务的简单性。

我是这么做的:

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

或者如果你有一大堆东西需要去掉,以至于一个单行的解决方案会无缘无故地变长:

removal_list = [' ', '\t', '\n']
for s in removal_list:
myString = myString.replace(s, '')

因为没有什么东西比这更复杂了,我想分享这个,因为它帮助了我。

这是我最初使用的:

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

在 join 中使用一个列表内涵怎么样?

>>> 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