我不会撒谎的。有多种方法可以在 Python 中修剪字符串。

但是......事实是,你不需要知道他们中的每一个。

在本文中,您将只看到最重要的技术,例如去除前导和尾随空格(以及字符串内的空格)。您还将学习如何删除制表符、换行符、回车符 (CRLF) 和其他字符。我们将只使用本机方法和正则表达式——不需要外部库!

在本文结束时,您将掌握:

  • 如何修剪字符串

*通过从开头去除前导空格

*通过从末尾去除尾随空格

*通过删除字符串的开头和结尾的空格

  • 如何修剪换行符

  • 如何修剪回车符(CRLF)

  • 如何修剪标签

  • 如何从字符串中修剪字符组合

  • 如何去除字符串中的多个空格

*通过仅删除重复

*通过删除所有空格

  • 如何剥离字符串列表

  • 如何剥离(Numpy)字符串数组

如何从字符串中修剪字符

修剪字符串意味着从字符串的开头、结尾或两侧删除某些字符。删除不需要的字符可以更容易地比较字符串并且可以防止难以调试的问题。

您可以删除任何类型的 o 字符,但通常我们感兴趣的是删除空格、换行符、回车符 (CRLF)、制表符和其他特殊符号。

在本节中,我们将了解如何删除前导或尾随空格、空格、换行符、回车符 (CRLF) 和制表符。

从字符串的开头去除前导空格

str类有一个非常方便的方法来修剪名为str.lstrip的前导空格,这是“left-strip”的简写,因为它从左侧修剪字符串。您可以将其视为左装饰。

>>> '   hello   '.lstrip()
'hello   '

进入全屏模式 退出全屏模式

使用 python .lstrip 方法从字符串中删除前导空格

当不带参数调用str.lstrip时,它会从左到右删除所有空格。但是如果你想要的只是剥离第一个字符,那么有两种方法可以做到这一点。第一个假设在字符串的开头总是至少有一个空格。如果是这种情况,那么您可以将其切片。

>>> s = '  hello'
>>> s = s[1:]
>>> s
' hello'

进入全屏模式 退出全屏模式

如果不能保证,我们需要先检查字符串是否以空格开头。

>>> def strip_first(s: str, ch: str = ' ') -> str:
     if s and s[0] == ch:
         return s[1:]
     return s

>>> strip_first('hello')
'hello'

>>> strip_first('   hello')
 '  hello'

进入全屏模式 退出全屏模式

从字符串末尾去除尾随空格

从字符串末尾删除尾随空格的方法是使用str.rstrip

此方法需要一个 chars 列表并从右侧修剪字符串。它会删除与您传递的字符之一匹配的所有字符,并在不再匹配时停止。默认情况下,如果您不向str.rstrip()传递任何内容,它会删除空白。您可以将其视为正确的修剪。

>>> '   hello   '.rstrip()
'   hello'
>>> '***hello***'.rstrip('*')
'***hello'

进入全屏模式 退出全屏模式

使用 python .rstrip 方法去除字符串末尾的尾随空格

有时您可能只想修剪字符串的最后一个字符。我们可以使用与上一个示例相同的逻辑。检查最后一个字符是否为空格,并使用 slice 将其删除。

>>> def strip_last(s: str, ch: str = ' ') -> str:
     if s and s[-1] == ch:
         return s[:-1]
     return s


>>> strip_last('hello')
'hello'

>>> strip_last('hello ')
'hello'

>>> strip_last('')
''

进入全屏模式 退出全屏模式

从字符串的开头和结尾删除空格

如果您只想从字符串的开头和结尾删除空格,那么str.strip将为您提供更好的服务。

此方法修剪字符串的两侧。就像str.lstripstr.rstrip一样,如果您可以将任何字符组合作为参数传递,它将从两端删除它们。

⚠️ 一个常见的误解是认为 Python 中有一个 trim() 函数。

# by default, strip removes whitespaces
>>> '   hello   '.strip()
'hello'
# but you can also strip other character
>>> '***hello***'.strip('*')
'hello'

进入全屏模式 退出全屏模式

使用 python .strip 去除字符串两边的空格

如何修剪换行符

我们已经看到str.strip如何从字符串的两侧删除空格。我还提到过,此方法采用 chars 参数,您可以使用该参数传递要修剪的字符组合。

要修剪换行符,您可以传递\n它将从字符串的两侧删除所有换行符。

>>> s = """
... 
... 
...  hello
... 
... 
... """
>>> s
'\n\n\n hello\n\n\n'
>>> s.strip('\n')
' hello'

进入全屏模式 退出全屏模式

使用 .strip 方法从字符串中去除新行

如何修剪回车 (CRLF)

回车 (CR) 和换行 (LF) 只不过是换行符。它们由\r\n的串联表示,形成\r\n。这就是 Microsoft Windows、Symbian OS 和其他非 Unix 操作系统如何代表一个新行[source]。

从字符串中删除它们与删除单个换行符相同。你用\r\nstr.strip并且方法完成了它的工作!

>>> s = "  hello world\r\n\r\n"
>>> print(s)
  hello world


>>> s.strip('\r\n')
'  hello world'

进入全屏模式 退出全屏模式

从python中的字符串修剪回车换行(CRLF)

如何修剪标签

如果您从一开始就遵循本指南,您可能已经知道如何执行此操作。在 Python 中从字符串中修剪制表符与其他字符相同,您使用str.strip并将 '\t' 字符串传递给它。

>>> s = "\t\t\t  hello  world \t"       
>>> s
'\t\t\t  hello  world \t'
>>> print(s)
              hello  world  
>>> s.strip('\t')
'  hello  world '

进入全屏模式 退出全屏模式

在 python 中使用 strip 方法从字符串中剥离制表符

就是这样!

如何从字符串中修剪字符组合

正如我之前提到的,str.strip将字符串作为参数,而不仅仅是单个字符。此字符序列是您要从字符串的开头和结尾删除的所有字符的组合。

>>> s = "  \ns hello world \n    s"
>>> s    
'  \ns hello world \n    s'
>>> print(s)

s hello world 
    s
>>> s.strip('\n s')
'hello world'

进入全屏模式 退出全屏模式

在python中从字符串的两侧修剪多个字符的组合

如何删除字符串中的多个空格

有时你想做的不仅仅是修剪,假设你想删除字符串中的字符。有两种方法可以做到这一点:一种是只删除重复项;另一种是删除所有多余的空格。

仅删除重复项

要仅删除重复的字符,可以使用正则表达式模块re

>>> import re
>>> s = "   Python   is really   a    great language.    "
>>> re.sub("\s+" , " ", s)
' Python is really a great language. '

进入全屏模式 退出全屏模式

使用 re 模块在 python 中删除字符串中的重复空格

这种方法摆脱了所有连续的空格。如果您不仅想这样做,还想通过删除前导空格和尾随空格来修剪字符串怎么办?

一种方法是拆分字符串,然后像这样加入:

>>> s = "   Python   is really   a    great language.    "
>>> " ".join(s.split())
'Python is really a great language.'
>>> # This is the same as using regex then stripping the whitespaces
>>> re.sub("\s+" , " ", s).strip()
'Python is really a great language.'

进入全屏模式 退出全屏模式

删除所有空格

现在,如果要删除字符串中的所有空格,请使用正则表达式或调用str.replace方法。

使用re(正则表达式模块)

>>> import re
>>> s = "   Python   is really   a    great language.    "
>>> re.sub("\s+" , "", s) 
'Pythonisreallyagreatlanguage.'

进入全屏模式 退出全屏模式

使用正则表达式从 python 中的字符串中删除所有空格

使用replace

>>> s = "   Python   is really   a    great language.    "
>>> s.replace(' ', '')
'Pythonisreallyagreatlanguage.'

进入全屏模式 退出全屏模式

使用 .replace 从字符串中删除所有空格

如何剥离字符串列表

修剪字符串列表与修剪单个字符串几乎相同。唯一的区别是您必须遍历列表,并在每个列表上调用str.strip方法。例如,您可以通过使用列表推导来返回一个所有字符串都被修剪的新列表。

>>> lst = ["string1\n", "string2\n", "string3\n"]
>>> [s.strip('\n') for s in lst]
['string1', 'string2', 'string3']

进入全屏模式 退出全屏模式

如何剥离(Numpy)字符串数组

由于其性能和易用性,将Numpy用于数据科学任务非常普遍。

如果你有一个字符串数组并且想要修剪其中的每一个,Numpy 提供了一个高效的向量化实现strip

其实它也有.lstrip.rstrip.replace等许多字符串操作。

矢量化版本的工作方式略有不同,它们不是方法,而是numpy.char模块中的函数。因此,您必须传递数组和要修剪的字符列表。

>>> import numpy as np
>>> arr = np.array([' helloworld   ', ' hello'])
array([' helloworld   ', ' hello'], dtype='<U7')
>>> np.char.strip(arr, ' ')
array(['helloworld', 'hello'], dtype='<U7')

进入全屏模式 退出全屏模式

python_numpy_1.png

结论

在这篇文章中,您学习了几种在 Python 中修剪字符串的方法,包括字符串数组。 Python 允许我们轻松去除前导和尾随字符。如果您不想在每一侧删除多余的字符,而是想在内部删除这些字符,您可以依靠正则表达式模块。希望这篇文章对您有所帮助,下次再见!

参考:

https://stackoverflow.com/questions/761804/how-do-i-trim-whitespace-from-a-string

https://stackoverflow.com/questions/8270092/remove-all-whitespace-in-a-string

https://stackoverflow.com/questions/1546226/is-there-a-simple-way-to-remove-multiple-spaces-in-a-string

您可能喜欢的其他帖子:

  • 如何在 Python 中选择 isdigit()、isdecimal() 和 isnumeric()

  • 如何在 Python 中比较两个字符串(8 种简单方法)

  • Pylint:如何修复“c0209:格式化可能是 f 字符串的常规字符串(考虑使用 f 字符串)”

  • 如何用 Python 实现随机字符串生成器

  • 如何在 Python 中检查字符串是否为有效 URL

  • Python F-String:73个例子来帮助你掌握它

下次见!

本帖原发于https://miguendes.me

Logo

学AI,认准AI Studio!GPU算力,限时免费领,邀请好友解锁更多惊喜福利 >>>

更多推荐