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

250

6
http://docs.python.org/library/stdtypes.html#str.split - getekha
9
值得阅读 Python 标准文档并尝试理解他人编写的一些程序,以开始掌握 Python 基础。练习、复制和修改都是学习语言的好工具。 - Tony Veijalainen
5个回答

397
你可以使用 str.split 方法:string.split('__')
>>> "MATCHES__STRING".split("__")
['MATCHES', 'STRING']

1
我在想,第一个例子(仅使用split())和第二个例子(带有for循环)之间有什么区别? - EndenDragon
4
for循环会自动应用x.strip()并返回一个没有两侧空格的匹配项列表。关键在于细节。 - Sébastien Vercammen
1
嘿,由于这是一个非常流行的问题,我编辑了它,只问了一个具体的问题,并删除了围绕分隔符周围的空格部分,因为不清楚OP甚至期望发生什么(因为问题中从未有过问题)。我认为这样提出的问题(和答案)更有用,但如果您不同意,请随时回滚所有编辑。 - Aran-Fey
通常你只需要分割后字符串的一部分。使用 'match'.split('delim')[0] 获取第一个部分等。 - Timo

4

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

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

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

3
除了 splitrsplit,还有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

Timeit代码基于这个答案


2
当字符串中有两个或更多元素时(在下面的示例中有三个),您可以使用逗号将这些项分开:
最初的回答:当字符串中有多个元素时,使用逗号分隔这些项。
date, time, event_name = ev.get_text(separator='@').split("@")

这行代码执行后,三个变量将分别获得变量 ev 中三个部分的值。

因此,如果变量 ev 包含以下字符串并应用分隔符 @

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

然后,在split操作之后,变量

  • date将具有值Sa., 23. März
  • time将具有值19:00
  • event_name将具有值Klavier + Orchester: SPEZIAL
最初的回答

"然后你可以使用逗号"。这被称为解包列表 - Gino Mempin

1
对于Python 3.8,实际上您不需要使用get_text方法,您可以直接使用ev.split("@")。事实上,get_text方法会抛出一个属性错误。因此,如果您有一个字符串变量,例如:
filename = 'file/foo/bar/fox'

您可以按照上面评论中的建议,将其分成不同的变量,但需要纠正一下,用逗号隔开即可。
W, X, Y, Z = filename.split('_') 
W = 'file' 
X = 'foo'
Y = 'bar'
Z = 'fox'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接