题 如何从Python字符串中修剪空格?


如何从Python中的字符串中删除前导和尾随空格?

例如:

" Hello " --> "Hello"
" Hello"  --> "Hello"
"Hello "  --> "Hello"
"Bob has a cat" --> "Bob has a cat"

923
2018-04-17 19:16


起源


这个问题让我与同事们谈论剥离3分钟。对于其他任何一半加入的人来说,他们会认为我们都有点工作。 - Whitecat


答案:


只有一个空间,还是所有这样的空间?如果第二个,那么字符串已经有了 .strip() 方法:

>>> ' Hello '.strip()
'Hello'
>>> ' Hello'.strip()
'Hello'
>>> 'Bob has a cat'.strip()
'Bob has a cat'
>>> '          Hello        '.strip()  # ALL spaces at ends removed
'Hello'

但是,如果您只需删除一个空格,则可以使用以下命令:

def strip_one_space(s):
    if s.endswith(" "): s = s[:-1]
    if s.startswith(" "): s = s[1:]
    return s

>>> strip_one_space("   Hello ")
'  Hello'

另外,请注意 str.strip() 删除其他空格字符(例如制表符和换行符)。要仅删除空格,可以指定要作为参数删除的字符 strip,即:

>>> "  Hello\n".strip(" ")
'Hello\n'

1405
2018-04-17 19:21



如果你需要strip函数,例如map函数,你可以通过str.strip()访问它,就像map(str.strip,collection_of_s)一样 - Ward
有没有办法只修剪两端的空白? - Nikhil Girraj
@killthrush感谢您的参考,但我认为您的意思是 rstrip() 功能。 :-) - Nikhil Girraj
有时我觉得python故意避免绝大多数语言使用的被广泛接受和有意义的名称,以便“独特”和“不同” - strip 代替 trim, isinstance 代替 instanceof, list 代替 array等等,为什么不只是使用每个人都熟悉的名字?吉兹:P - Gershom Maes
@GershomMaes in strip我完全同意,但是列表与数组完全不同。 - JFA


正如上面的答案所指出的那样

myString.strip()

将删除所有前导和尾随空白字符,例如\ n,\ r,\ t,\ t,\ t \ t \ t,空格。

为了更灵活,请使用以下内容

  • 仅删除 领导 空白字符: myString.lstrip()
  • 仅删除 尾随 空白字符: myString.rstrip()
  • 移除了 具体 空白字符: myString.strip('\n') 要么 myString.lstrip('\n\r') 要么 myString.rstrip('\n\t') 等等。

更多细节可在 文档


223
2018-05-18 04:16



我相信是\ r \ n不是\ n \ r ...(无法编辑帖子 - 没有足够的字符修改) - StefanNch
@StefanNch:角色的顺序根本不重要。 \ n \ r也将删除\ r \ n。 - Johannes Overmann


strip 不仅限于空格字符:

# remove all leading/trailing commas, periods and hyphens
title = title.strip(',.-')

101
2018-04-17 13:22





myString.strip()

44
2018-04-17 19:19



这篇文章只有代码,它没有解释函数的作用。它是删除前导或尾随空格,还是两者都删除?它只删除空格或各种空格吗?你可以让它删除只是空格,或者还有其他功能吗?如果它同时删除了前导空格和尾随空格,你能不能只删除其中一个,或者是否有(一个)其他函数来完成这项工作? myString.strip() 我没有回答任何一个问题。 - Έρικ Κωνσταντόπουλος
公平地说,OP专门要求一种从字符串中删除前导和尾随空格的方法。足够好回答我 - Denis Lins
对我来说也足够好了。 - Ben Harrison


你想要strip():

myphrases = [ " Hello ", " Hello", "Hello ", "Bob has a cat" ]

for phrase in myphrases:
    print phrase.strip()

20
2018-04-17 19:21





没有这个功能,还有一种方法可以做到这一点

string = "Hello Wor l d "
tmp_list = []
for char in string:
    if char != " ":
    tmp_list +=char
final_string = "".join(tmp_list)
print final_string

但只是为了好玩:)


0
2018-01-17 05:36



看起来像是一本不怎么做的教科书示例:1)它删除了所有的空格,不仅仅是尾随和前导2)它实际上是非pythonic。如果你真的想从字符串中删除空格(包括尾随和前导,但不限于它们),你可以使用“re”模块或执行以下操作:s =“Bob有一只猫”t =“”。加入([c for c in s if c!=“”])虽然一般的经验法则是 - 如果有内置函数可以做到这一点,很可能你不想自己做。适用于任何编程语言。 - DBa
我不是想要击败内置函数。 - jvpessoa10