关于python:如何去掉空格?

How do I trim whitespace?

是否有一个python函数可以从字符串中删除空白(空格和制表符)?

示例:\t example string\texample string


两边空白:

1
2
s ="  \t a string example\t "
s = s.strip()

右侧空白:

1
s = s.rstrip()

左侧空白:

1
s = s.lstrip()

正如Thedz所指出的,您可以提供一个参数来将任意字符剥离到以下任何函数:

1
2
3
s = s.strip(' \t

'
)

这将从字符串的左侧、右侧或两侧删除任何空格、\t

字符。

上面的示例仅从字符串的左侧和右侧删除字符串。如果还想从字符串中间删除字符,请尝试re.sub

1
2
import re
print re.sub('[\s+]', '', s)

应该打印出来:

1
astringexample


python trim方法称为strip

1
2
3
str.strip() #trim
str.lstrip() #ltrim
str.rstrip() #rtrim


对于前导空格和尾随空格:

1
2
s = '   foo    \t   '
print s.strip() # prints"foo"

否则,正则表达式的作用是:

1
2
3
4
import re
pat = re.compile(r'\s+')
s = '  \t  foo   \t   bar \t  '
print pat.sub('', s) # prints"foobar"


您还可以使用非常简单的基本函数:str.replace(),用于空格和制表符:

1
2
3
4
5
6
7
>>> whitespaces ="   abcd ef gh ijkl      "
>>> tabs ="        abcde       fgh        ijkl"

>>> print whitespaces.replace("","")
abcdefghijkl
>>> print tabs.replace("","")
abcdefghijkl

简单而简单。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#how to trim a multi line string or a file

s=""" line one
\tline two\t
line three"""


#line1 starts with a space, #2 starts and ends with a tab, #3 ends with a space.

s1=s.splitlines()
print s1
[' line one', '\tline two\t', 'line three ']

print [i.strip() for i in s1]
['line one', 'line two', 'line three']




#more details:

#we could also have used a forloop from the begining:
for line in s.splitlines():
    line=line.strip()
    process(line)

#we could also be reading a file line by line.. e.g. my_file=open(filename), or with open(filename) as myfile:
for line in my_file:
    line=line.strip()
    process(line)

#moot point: note splitlines() removed the newline characters, we can keep them by passing True:
#although split() will then remove them anyway..
s2=s.splitlines(True)
print s2
[' line one
'
, '\tline two\t
'
, 'line three ']

(re.sub(' +', ' ',(my_str.replace('
',' ')))).strip()

这将删除所有不需要的空格和换行符。希望这有帮助

1
2
3
4
5
import re
my_str = '   a     b
 c   '

formatted_str = (re.sub(' +', ' ',(my_str.replace('
'
,' ')))).strip()

这将导致:

"A B C"将更改为"A B C"


还没有人发布这些regex解决方案。

匹配:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
>>> import re
>>> p=re.compile('\\s*(.*\\S)?\\s*')

>>> m=p.match('  \t blah ')
>>> m.group(1)
'blah'

>>> m=p.match('  \tbl ah  \t ')
>>> m.group(1)
'bl ah'

>>> m=p.match('  \t  ')
>>> print m.group(1)
None

搜索(您必须以不同的方式处理"仅空格"输入框):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
>>> p1=re.compile('\\S.*\\S')

>>> m=p1.search('  \tblah  \t ')
>>> m.group()
'blah'

>>> m=p1.search('  \tbl ah  \t ')
>>> m.group()
'bl ah'

>>> m=p1.search('  \t  ')
>>> m.group()
Traceback (most recent call last):
File"<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'

如果使用re.sub,可能会删除内部空白,这是不可取的。


空白包括空格、制表符和CRLF。所以我们可以使用的一个优雅的一行字符串函数是translate。

' hello apple'.translate(None, '
\t
')

或者如果你想彻底

1
2
import string
' hello  apple'.translate(None, string.whitespace)

1
2
3
4
5
6
7
8
    something ="\t  please_     \t remove_  all_    



whitespaces
\t "


    something ="".join(something.split())

输出:请删除所有空格


如果使用python 3:在打印语句中,请使用sep=。这将把所有的空间分开。

例子:

1
2
txt="potatoes"
print("I love",txt,"",sep="")

这将打印:我喜欢土豆。

而不是:我喜欢土豆。

在您的情况下,由于您将尝试乘坐 ,do sep=" "


如果只想从字符串的开始和结束处删除空白,可以这样做:

1
2
3
4
some_string ="    Hello,    world!
   "

new_string = some_string.strip()
# new_string is now"Hello,    world!"

这与qt的qstring::trimmed()方法非常相似,因为它删除了前导和尾随的空白,而只保留内部空白。

但是,如果您希望使用qt的qstring::simpled()方法,它不仅删除前导空格和尾随空格,而且将所有连续的内部空格"挤压"为一个空格字符,则可以使用.split()"".join的组合,如下所示:

1
2
3
4
5
some_string ="\t    Hello,  
\t  world!
   "

new_string ="".join(some_string.split())
# new_string is now"Hello, world!"

在上一个示例中,每个内部空白序列都替换为一个空格,同时仍然从字符串的开始和结束处删除空白。


尝试翻译

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
>>> import string
>>> print '\t

  hello

 world \t

'


  hello
 world  
>>> tr = string.maketrans(string.whitespace, ' '*len(string.whitespace))
>>> '\t

  hello

 world \t

'
.translate(tr)
'     hello    world    '
>>> '\t

  hello

 world \t

'
.translate(tr).replace(' ', '')
'helloworld'

通常,我使用以下方法:

1
2
3
4
5
6
7
8
9
10
>>> myStr ="Hi
 Stack Over
 flow!"

>>> charList = [u"\u005Cn",u"\u005Cr",u"\u005Ct"]
>>> import re
>>> for i in charList:
        myStr = re.sub(i, r"", myStr)

>>> myStr
'Hi Stack Over  flow'

注意:这仅用于删除""、"
"和" "。它不会删除多余的空间。


用于从字符串中间删除空格

1
2
3
$p ="ATGCGAC ACGATCGACC";
$p =~ s/\s//g;
print $p;

输出:ATGCGACACGGATCGACC公司


这将删除字符串开头和结尾的所有空白和换行符:

1
2
3
4
5
6
7
8
>>> s ="  
\t  
   some
 text
    "

>>> re.sub("^\s+|\s+$","", s)
>>>"some
 text"