Python 如何修剪字符串中的空白?

Python 如何修剪字符串中的空白?,python,string,trim,Python,String,Trim,如何在Python中删除字符串的前导和尾随空格 例如: " Hello " --> "Hello" " Hello" --> "Hello" "Hello " --> "Hello" "Bob has a cat" --> "Bob has a cat" 这将删除myString中的所有前导和尾随空格: myString.strip() 你想要: 只有一个空间还是所有连续的空间?如果是第二个,则字符串已经有一个方法: 但是,如果只需要删除一个空间,可以使用以下方法

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

例如:

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

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

myString.strip()
你想要:


只有一个空间还是所有连续的空间?如果是第二个,则字符串已经有一个方法:

但是,如果只需要删除一个空间,可以使用以下方法:

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'

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

my_string.strip()
将删除所有前导和尾随空格字符,例如
\n
\r
\t
\f
,空格

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

  • 仅删除前导的空格字符:
  • 仅删除尾随的空格字符:
  • 删除specific空格字符:
    my_string.strip('\n')
    my_string.lstrip('\n\r')
    my_string.rstrip('\n\t')
    等等

更多详细信息请参见。

条带
不限于空格字符:

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

我想删除字符串中过多的空格(也包括字符串之间的空格,而不仅仅是开头或结尾的空格)。我做了这个,因为我不知道怎么做,否则:

string = "Name : David         Account: 1234             Another thing: something  " 

ready = False
while ready == False:
    pos = string.find("  ")
    if pos != -1:
       string = string.replace("  "," ")
    else:
       ready = True
print(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:
            break
    return ''.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' >>>打印(“”.join(str_1.split())) 你好,世界 >>> >>> >>>str_2=‘你好,世界’ >>>打印(“”.join(str_2.split())) 你好,世界 >>> >>> >>>str_3=‘你好,世界’ >>>打印(“”.join(str_3.split())) 你好,世界 >>> >>> >>>str_4=‘你好,世界’ >>>打印(“”.join(str_4.split())) 你好,世界 >>> >>> >>>str_5=‘你好,世界’ >>>打印(“”.join(str_5.split())) 你好,世界 >>> >>> >>>str_6=‘你好,世界’ >>>打印(“”.join(str_6.split())) 你好,世界 >>> >>> >>>str_7=‘你好,世界’ >>>打印(“”.join(str_7.split())) 你好,世界
如您所见,这将删除字符串中的所有多个空格(输出为
helloworld
for all)。地点不重要。但是如果你真的需要前导和尾随空格,那么就可以找到
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()的用法

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

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

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

首先要检查的是您是否有 缩进正确。如果有,请检查是否有 代码中有空格的混合制表符

记住:代码 (对你来说)看起来不错,但翻译拒绝运行。如果 如果您怀疑这一点,一个快速修复方法是将代码放入 空闲编辑窗口,然后选择编辑…”从 菜单系统,在选择“格式…”之前,请选择“非固定区域”。 如果您将制表符与空格混合,这将转换您的所有制表符
制表符一次切换到空格(并修复任何缩进问题)。

如果您需要strip函数,例如map函数,您可以通过str.strip()访问它,就像so map(str.strip,collection of_s)有没有办法只修剪末尾的空格?@killthrush谢谢您的参考,但我认为您指的是
rstrip()
功能::-)有时我觉得python故意避免使用绝大多数语言使用的公认且有意义的名称,以使其“独特”和“不同”——
strip
而不是
trim
isinstance
而不是
instanceof
list
而不是
array
,等等,等等。为什么不使用大家都熟悉的名字呢??天哪:P@GershomMaes对于
strip
,我完全同意,但列表与数组完全不同。我认为\r\n不是\r\n。。。(无法编辑帖子-修改的字符不够)@stefanch:字符的顺序根本不重要\n\r还将删除\r\n。虽然这样做有效,但效率不高,请改用:打印([phrase.strip(),用于myphrases中的短语)),让更多人了解
rstrip
陷阱<代码>'WKHS.US.TXT'。rstrip('.US.TXT')将返回
WKH
,而不是
WKHS
。这个
rstrip
创建了一个对我来说很难排除的BUG。
import re

input  = " Hello "
output = re.sub(r'^\s+|\s+$', '', input)
# output = 'Hello'
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 
def whitespace(words):
    r=words.replace(' ','') # removes all whitespace
    n=r.replace(',','|') # other uses of replace
    return n
def run():
    words=input("Enter the word to test") # take user input
    m=whitespace(words) #encase the def in run() to imporve usability on various functions
    o=m.count('f') # for testing
    return m,o
print(run())
output- ('hello|howareyou', 0)