删除字符串中的所有空格

2024-12-05 08:38:00
admin
原创
150
摘要:问题描述:我想消除字符串两端以及单词之间的所有空格。我有这个 Python 代码:def my_handle(self): sentence = ' hello apple ' sentence.strip() 但这只能消除字符串两边的空格。如何删除所有空格?解决方案 1:如果要删除前导和...

问题描述:

我想消除字符串两端以及单词之间的所有空格。

我有这个 Python 代码:

def my_handle(self):
    sentence = ' hello  apple  '
    sentence.strip()

但这只能消除字符串两边的空格。如何删除所有空格?


解决方案 1:

如果要删除前导和结束空格,请使用str.strip()

>>> "  hello  apple  ".strip()
'hello  apple'

如果要删除所有空格字符,请使用(注意:这只会删除“正常”的 ASCII 空格字符,而不会删除任何其他空格str.replace() ' ' U+0020

>>> "  hello  apple  ".replace(" ", "")
'helloapple'

如果要删除所有空格然后在单词之间保留一个空格字符,请使用str.split()后跟str.join()

>>> " ".join("  hello  apple  ".split())
'hello apple'

如果要删除所有空格,请将上述内容更改" """

>>> "".join("  hello  apple  ".split())
'helloapple'

解决方案 2:

要仅删除空格,请使用str.replace

sentence = sentence.replace(' ', '')

要删除所有空白字符(空格、制表符、换行符等),您可以使用splitjoin

sentence = ''.join(sentence.split())

或正则表达式:

import re
pattern = re.compile(r's+')
sentence = re.sub(pattern, '', sentence)

如果只想删除开头和结尾的空格,可以使用strip

sentence = sentence.strip()

您还可以使用lstrip它仅从字符串开头删除空格,以及rstrip从字符串末尾删除空格。

解决方案 3:

另一种方法是使用正则表达式并匹配这些奇怪的空白字符。以下是一些示例:

删除字符串中的所有空格,甚至单词之间的空格:

import re
sentence = re.sub(r"s+", "", sentence, flags=re.UNICODE)

删除字符串开头的空格:

import re
sentence = re.sub(r"^s+", "", sentence, flags=re.UNICODE)

删除字符串末尾的空格:

import re
sentence = re.sub(r"s+$", "", sentence, flags=re.UNICODE)

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

import re
sentence = re.sub("^s+|s+$", "", sentence, flags=re.UNICODE)

仅删除重复的空格:

import re
sentence = " ".join(re.split("s+", sentence, flags=re.UNICODE))

(所有示例均适用于 Python 2 和 Python 3)

解决方案 4:

“空白”包括空格、制表符和 CRLF。因此,我们可以使用一个优雅的单行字符串函数str.translate

Python 3

' hello  apple '.translate(str.maketrans('', '', ' 
    
'))

或者如果你想要更彻底一些:

import string
' hello  apple'.translate(str.maketrans('', '', string.whitespace))

Python 2

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

或者如果你想要更彻底一些:

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

解决方案 5:

要删除开头和结尾的空格,请使用strip

>> "  foo bar   ".strip()
"foo bar"

解决方案 6:

' hello  
    apple'.translate({ord(c):None for c in ' 
    
'})

MaK 已经指出了上面的“翻译”方法。并且此变体适用于 Python 3(请参阅此问答)。

解决方案 7:

此外,strip还有一些变化:

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

sentence= sentence.strip()

删除字符串开头的空格:

sentence = sentence.lstrip()

删除字符串末尾的空格:

sentence= sentence.rstrip()

所有三个字符串函数strip lstriprstrip都可以接受要删除的字符串的参数,默认为全部删除空格。这在处理某些特定内容时非常有用,例如,您可以只删除空格而不删除换行符:

" 1. Step 1
".strip(" ")

或者,您可以在读取字符串列表时删除多余的逗号:

"1,2,3,".strip(",")

解决方案 8:

当心:

strip执行 rstrip 和 lstrip(删除前导和尾随空格、制表符、回车符和换页符,但不会在字符串中间删除它们)。

如果您仅替换空格和制表符,您最终可能会得到隐藏的 CRLF,它们看起来与您要查找的内容相匹配,但并不相同。

解决方案 9:

消除字符串两端以及单词之间的所有空格。

>>> import re
>>> re.sub("s+", # one or more repetition of whitespace
    '', # replace with empty string (->remove)
    ''' hello
...    apple
... ''')
'helloapple'

Python 文档:

解决方案 10:

我使用 split() 忽略所有空格并使用 join() 连接字符串。

sentence = ''.join(' hello  apple  '.split())
print(sentence) #=> 'helloapple'

我更喜欢这种方法,因为它只是一个表达式(而不是语句)。

它易于使用,并且无需绑定到变量即可使用。

print(''.join(' hello  apple  '.split())) # no need to binding to a variable

解决方案 11:

import re    
sentence = ' hello  apple'
re.sub(' ','',sentence) #helloworld (remove all spaces)
re.sub('  ',' ',sentence) #hello world (remove double spaces)

解决方案 12:

在以下脚本中,我们导入正则表达式模块,使用该模块将一个或多个空格替换为单个空格。这可确保删除内部多余的空格。然后我们使用 strip() 函数删除前导空格和尾随空格。

# Import regular expression module
import re

# Initialize string
a = "     foo      bar   "

# First replace any number of spaces with a single space
a = re.sub(' +', ' ', a)

# Then strip any leading and trailing spaces.
a = a.strip()

# Show results
print(a)

解决方案 13:

在 Python 3 中,所有字符串字符都是 unicode 文字;因此,由于str.split()所有空格字符进行拆分,这意味着按 unicode 空格字符进行拆分。因此split+join语法(如
1、
2、
3)将产生re.sub与 UNICODE 标志相同的输出(如4);事实上,UNICODE 标志在这里是多余的(如
2、
5、
6、
7)。

import re
import sys

# all unicode characters
sentence = ''.join(map(chr, range(sys.maxunicode+1)))

# remove all white space characters
x = ''.join(sentence.split())
y = re.sub(r"s+", "", sentence, flags=re.UNICODE)
z = re.sub(r"s+", "", sentence)

x == y == z      # True

在性能方面,由于 Python 的字符串方法经过了优化,因此它们比正则表达式快得多。如下面的 timeit 测试所示,当从 OP 中的字符串中删除所有空格字符时,Python 字符串方法比re选项快 7 倍以上。

import timeit

import timeit

setup = """
import re
s = ' hello       apple  '
"""

t1 = min(timeit.repeat("''.join(s.split())", setup))
t2 = min(timeit.repeat("re.sub(r's+', '', s, flags=re.UNICODE)", setup))


t2 / t1  # 7.868004799367726

解决方案 14:

我发现这对我来说最有效:

test_string = '  test   a   s   test '
string_list = [s.strip() for s in str(test_string).split()]
final_string = ' '.join(string_array)
# final_string: 'test a s test'

它会删除所有空格、制表符等等。

解决方案 15:

只是对Emil Stenström 的回答的补充

此代码删除所有空格,您也可以删除自己的多余的 utf-8 字符。

import re

def utf8trim(s: str) -> str:
    spaces = "|".join([r"s", "/u2800", "/u3164", "/u1160", "/uFFA0", "/u202c"])
    return re.sub(f"^[{spaces}]+|[{spaces}]+$", "", s, flags=re.UNICODE)

解决方案 16:

试试这个.. 我认为使用 split with strip 比使用 re 更好

def my_handle(self):
    sentence = ' hello  apple  '
    ' '.join(x.strip() for x in sentence.split())
#hello apple
    ''.join(x.strip() for x in sentence.split())
#helloapple
相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2809  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1713  
  PLM(产品生命周期管理)项目管理系统在企业产品研发与管理过程中扮演着至关重要的角色。然而,在项目推进过程中,资源冲突是不可避免的问题,它会影响项目进度、质量,甚至导致项目失败。有效解决资源冲突对于PLM项目管理系统的成功运行至关重要。接下来,我们将探讨应对资源冲突的5大策略。合作策略合作策略是一种双赢的解决方式。在P...
国内plm系统排名   7  
  产品生命周期管理(PLM)软件近年来在企业数字化转型进程中扮演着愈发重要的角色。对于中小企业而言,PLM软件的应用不仅是提升管理效率的工具,更是实现业务创新与可持续发展的关键助力。它涵盖了从产品的概念设计、研发、生产、销售到售后服务的全流程管理,通过整合企业内外部资源,优化业务流程,为企业创造显著的价值。然而,中小企业...
plm系统   9  
  项目复盘是项目管理中的重要环节,它能够帮助团队总结经验教训,提升后续项目的执行能力。PLM(产品生命周期管理)系统作为整合产品全生命周期信息的平台,为项目复盘提供了强大的支持。通过PLM系统实现项目复盘,能够更高效、全面地审视项目过程,挖掘潜在问题,为未来项目的成功奠定基础。明确复盘目标与范围明确复盘目标是项目复盘的首...
plm是什么意思   8  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用