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

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

" Hello world " --> "Hello world"" Hello world"  --> "Hello world""Hello world "  --> "Hello world""Hello world"   --> "Hello world"
1383475 次浏览

这将删除myString中的所有前导和尾随空格:

myString.strip()

你想要#0

myphrases = [" Hello ", " Hello", "Hello ", "Bob has a cat"]
for phrase in myphrases:print(phrase.strip())

要删除字符串周围的所有空格,请使用#0。例子:

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

请注意,#0删除所有空格字符,包括制表符和换行符。要仅删除空格,请指定要删除的特定字符作为strip的参数:

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

最多只删除一个空格:

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

正如上面的回答所指出的

my_string.strip()

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

要获得更大的灵活性,请使用以下

  • 仅删除领先空白字符:#0
  • 仅删除尾随空白字符:#0
  • 删除特定空白字符:my_string.strip('\n')my_string.lstrip('\n\r')my_string.rstrip('\n\t')等。

更多细节可在文档

strip也不仅限于空白字符:

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

我想删除字符串中太多的空格(也在字符串之间,不仅在开头或结尾)。我做了这个,因为我不知道如何做到这一点:

string = "Name : David         Account: 1234             Another thing: something  "
ready = Falsewhile ready == False:pos = string.find("  ")if pos != -1:string = string.replace("  "," ")else:ready = Trueprint(string)

这将替换一个空格中的双空格,直到您不再有双空格

我找不到我想要的解决方案,所以我创建了一些自定义函数。你可以试试。

def cleansed(s: str):""":param s: String to be cleansed"""assert s is not (None or "")# return trimmed(s.replace('"', '').replace("'", ""))return trimmed(s)

def trimmed(s: str):""":param s: String to be cleansed"""assert s is not (None or "")ss = trim_start_and_end(s).replace('  ', ' ')while '  ' in ss:ss = ss.replace('  ', ' ')return ss

def trim_start_and_end(s: str):""":param s: String to be cleansed"""assert s is not (None or "")return trim_start(trim_end(s))

def trim_start(s: str):""":param s: String to be cleansed"""assert s is not (None or "")chars = []for c in s:if c is not ' ' or len(chars) > 0:chars.append(c)return "".join(chars).lower()

def trim_end(s: str):""":param s: String to be cleansed"""assert s is not (None or "")chars = []for c in reversed(s):if c is not ' ' or len(chars) > 0:chars.append(c)return "".join(reversed(chars)).lower()

s1 = '  b Beer 's2 = 'Beer  b    's3 = '      Beer  b    's4 = '  bread butter    Beer  b    '
cdd = trim_start(s1)cddd = trim_end(s2)clean1 = cleansed(s3)clean2 = cleansed(s4)
print("\nStr: {0} Len: {1} Cleansed: {2} Len: {3}".format(s1, len(s1), cdd, len(cdd)))print("\nStr: {0} Len: {1} Cleansed: {2} Len: {3}".format(s2, len(s2), cddd, len(cddd)))print("\nStr: {0} Len: {1} Cleansed: {2} Len: {3}".format(s3, len(s3), clean1, len(clean1)))print("\nStr: {0} Len: {1} Cleansed: {2} Len: {3}".format(s4, len(s4), clean2, len(clean2)))

如果你想从左和右修剪指定数量的空格,你可以这样做:

def remove_outer_spaces(text, num_of_leading, num_of_trailing):text = list(text)for i in range(num_of_leading):if text[i] == " ":text[i] = ""else:break
for i in range(1, num_of_trailing+1):if text[-i] == " ":text[-i] = ""else:breakreturn ''.join(text)
txt1 = "   MY name is     "print(remove_outer_spaces(txt1, 1, 1))  # result is: "  MY name is    "print(remove_outer_spaces(txt1, 2, 3))  # result is: " MY name is  "print(remove_outer_spaces(txt1, 6, 8))  # result is: "MY name is"

这也可以用正则表达式来完成

import re
input  = " Hello "output = re.sub(r'^\s+|\s+$', '', input)# output = 'Hello'

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

因此,下面的解决方案将删除前导和尾随空格以及中间空格。就像如果您需要在没有多个空格的情况下获得清晰的字符串值一样。

>>> str_1 = '     Hello World'>>> print(' '.join(str_1.split()))Hello World>>>>>>>>> str_2 = '     Hello      World'>>> print(' '.join(str_2.split()))Hello World>>>>>>>>> str_3 = 'Hello World     '>>> print(' '.join(str_3.split()))Hello World>>>>>>>>> str_4 = 'Hello      World     '>>> print(' '.join(str_4.split()))Hello World>>>>>>>>> str_5 = '     Hello World     '>>> print(' '.join(str_5.split()))Hello World>>>>>>>>> str_6 = '     Hello      World     '>>> print(' '.join(str_6.split()))Hello World>>>>>>>>> str_7 = 'Hello World'>>> print(' '.join(str_7.split()))Hello World

如您所见,这将删除字符串中的所有多个空格(所有输出为Hello World)。位置无关紧要。但是如果您真的需要前导和尾随空格,那么可以找到strip()

作为一个初学者,看到这个线程让我头晕目眩。因此想出了一个简单的捷径。

虽然str.strip()可以删除前导和尾随空格,但它对字符之间的空格不执行任何操作。

words=input("Enter the word to test")# If I have a user enter discontinous threads it becomes a problem# input = "   he llo, ho w are y ou  "n=words.strip()print(n)# output "he llo, ho w are y ou" - only leading & trailing spaces are removed

相反,使用str.replace()更有意义,错误更少,更切题。下面的代码可以推广使用str.replace()

def whitespace(words):r=words.replace(' ','') # removes all whitespacen=r.replace(',','|') # other uses of replacereturn ndef run():words=input("Enter the word to test") # take user inputm=whitespace(words) #encase the def in run() to imporve usability on various functionso=m.count('f') # for testingreturn m,oprint(run())output- ('hello|howareyou', 0)

在不同的函数中继承相同的函数时可能会有所帮助。

为了删除在Pyhton中运行完成的代码或程序时导致大量缩进错误的“空白”。只需执行以下操作;显然,如果Python一直告诉错误是第1,2,3,4,5行的缩进,等等…,只需来回修复该行。

但是,如果您仍然遇到与键入错误、运算符等相关的程序问题,请确保您阅读了为什么Python错误对您大喊大叫:

要检查的第一件事是,你有你的如果你这样做,然后检查你是否有将代码中的制表符与空格混合。

记住:代码将看起来不错(对您来说),但解释器拒绝运行它。如果你怀疑这一点,一个快速的解决办法是把你的代码变成一个IDLE编辑窗口,然后选择编辑…"菜单系统,在选择格式之前…”取消区域。如果您将制表符与空格混合,这将转换您的所有制表符到空格(并修复任何缩进问题)。

一种方法是使用.地带()方法(删除所有周围的空格)

str = "  Hello World  "str = str.strip()**result: str = "Hello World"**

请注意,.地带()返回字符串的副本,并且不会更改下划线对象(因为字符串是不可变)。

如果您希望删除所有空格(不仅仅是修剪边缘):

str = ' abcd efgh ijk  'str = str.replace(' ', '')**result: str = 'abcdefghijk'