在 Python 中用分隔符拆分字符串

2024-12-02 08:41:00
admin
原创
165
摘要:问题描述:考虑以下输入字符串:'MATCHES__STRING' 我想在__出现“分隔符”的地方拆分该字符串。这应该输出一个字符串列表:['MATCHES', 'STRING'] 要按空格进行拆分,请参阅如何将字符串拆分为单词列表?。 要提取第一个分隔符之前的所有内容,请参阅第一次出现时拆分。 要提取最后...

问题描述:

考虑以下输入字符串:

'MATCHES__STRING'

我想在__出现“分隔符”的地方拆分该字符串。这应该输出一个字符串列表:

['MATCHES', 'STRING']

要按空格进行拆分,请参阅如何将字符串拆分为单词列表?。

要提取第一个分隔符之前的所有内容,请参阅第一次出现时拆分。

要提取最后一个分隔符之前的所有内容,请参阅在 Python 中分割字符串并获取冒号后最后一个段的值。


解决方案 1:

使用str.split方法:

>>> "MATCHES__STRING".split("__")
['MATCHES', 'STRING']

解决方案 2:

除了splitand之外rsplit,还有partition/ rpartition。它将字符串分隔一次,但根据问题的提问方式,它也可能适用。

例子:

>>> "MATCHES__STRING".partition("__")
('MATCHES', '__', 'STRING')

>>> "MATCHES__STRING".partition("__")[::2]
('MATCHES', 'STRING')

然后速度再快一点split("_",1)

$ python -m timeit "'validate_field_name'.split('_', 1)[-1]"
2000000 loops, best of 5: 136 nsec per loop

$ python -m timeit "'validate_field_name'.partition('_')[-1]"
2000000 loops, best of 5: 108 nsec per loop

时间表基于此答案

解决方案 3:

您可能对该模块感兴趣csv,它是为逗号分隔的文件设计的,但可以轻松修改为使用自定义分隔符。

import csv
csv.register_dialect( "myDialect", delimiter = "__", <other-options> )
lines = [ "MATCHES__STRING", "MATCHES __ STRING" ]

for row in csv.reader( lines ):
    ...

解决方案 4:

当字符串中有两个或更多元素时(在下面的示例中有三个),可以使用逗号分隔这些项目:

date, time, event_name = ev.get_text(separator='@').split("@")

这行代码之后,三个变量将具有来自变量的三个部分的值ev

因此,如果变量ev包含此字符串并且我们应用分隔符@

Sa., 23. März@19:00@Klavier + Orchester: SPEZIAL

然后,split操作后变量

  • date将具有价值Sa., 23. März

  • time将具有价值19:00

  • event_name将具有价值Klavier + Orchester: SPEZIAL

解决方案 5:

对于 Python 3.8,您实际上不需要该get_text方法,您可以直接使用ev.split("@"),事实上该get_text方法会引发 AttributeError。因此,如果您有一个字符串变量,例如:

filename = 'file/foo/bar/fox'

您可以按照上面的评论中的建议,用逗号将其拆分为不同的变量,但需要进行更正:

W, X, Y, Z = filename.split('_') 
W = 'file' 
X = 'foo'
Y = 'bar'
Z = 'fox'

解决方案 6:

当您想用特定分隔符(例如:__|,等)拆分字符串时,使用方法(如顶部答案中所示)拆分会更容易、更快捷,.split()因为 Python 字符串方法直观且经过优化。但是,如果您需要使用模式(例如" __ ""__")拆分字符串,那么使用内置re模块可能会很有用。

对于OP中的例子:

import re

s1 = "MATCHES__STRING"
s2 = "MATCHES __ STRING"

re.split(r"s*__s*", s1)   # ['MATCHES', 'STRING']
re.split(r"s*__s*", s2)   # ['MATCHES', 'STRING']

s*匹配 0 个或更多空格字符,即,如果有空格,它将匹配任何空格,因此上述模式匹配____

如果需要拆分字符串列表,那么首先编译模式会更有效。

texts = ["a __ b", "c__d__e", "f  __ g"]
pattern = re.compile(r"s*__s*")
[pattern.split(s) for s in texts]  
# [['a', 'b'], ['c', 'd', 'e'], ['f', 'g']]
相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1565  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1354  
  信创国产芯片作为信息技术创新的核心领域,对于推动国家自主可控生态建设具有至关重要的意义。在全球科技竞争日益激烈的背景下,实现信息技术的自主可控,摆脱对国外技术的依赖,已成为保障国家信息安全和产业可持续发展的关键。国产芯片作为信创产业的基石,其发展水平直接影响着整个信创生态的构建与完善。通过不断提升国产芯片的技术实力、产...
国产信创系统   21  
  信创生态建设旨在实现信息技术领域的自主创新和安全可控,涵盖了从硬件到软件的全产业链。随着数字化转型的加速,信创生态建设的重要性日益凸显,它不仅关乎国家的信息安全,更是推动产业升级和经济高质量发展的关键力量。然而,在推进信创生态建设的过程中,面临着诸多复杂且严峻的挑战,需要深入剖析并寻找切实可行的解决方案。技术创新难题技...
信创操作系统   27  
  信创产业作为国家信息技术创新发展的重要领域,对于保障国家信息安全、推动产业升级具有关键意义。而国产芯片作为信创产业的核心基石,其研发进展备受关注。在信创国产芯片的研发征程中,面临着诸多复杂且艰巨的难点,这些难点犹如一道道关卡,阻碍着国产芯片的快速发展。然而,科研人员和相关企业并未退缩,积极探索并提出了一系列切实可行的解...
国产化替代产品目录   28  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

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

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

内置subversion和git源码管理

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

免费试用