在python中拆分字符串

时间:2013-10-01 22:15:51

标签: python string list python-2.7

我想以最有效的方式在python中分割一个sting,以及最“python-like”的方式。 说我有这个字符串:

s = '"Jens", "kasper", "Michael"' 

如何实现以下列表:

names = ["David", "Kasper", "Michael"]

意思是我想在大括号之间删除名称。

4 个答案:

答案 0 :(得分:5)

使用ast.literal_eval()

  

安全地评估表达式节点或Unicode或Latin-1编码   包含Python表达式的字符串。提供的字符串或节点可以   只包含以下Python文字结构:字符串,   数字,元组,列表,dicts,布尔值和无。

>>> from ast import literal_eval
>>> s = '"Jens", "kasper", "Michael"' 
>>> literal_eval(s)
('Jens', 'kasper', 'Michael')
>>> list(literal_eval(s))
['Jens', 'kasper', 'Michael']

答案 1 :(得分:3)

你可以这样拆分:

>>> s = '"Jens", "kasper", "Michael"' 
>>> s.split(', ')
['"Jens"', '"kasper"', '"Michael"']

您可以删除这样的引号:

>>> [name.strip('"') for name in s.split(', ')]
['Jens', 'kasper', 'Michael']

但实际上,您应该考虑如何构造这个奇怪的字符串,并进行匹配操作,而不是尝试从第一原则构建解析器。这些Python文字是? JSON字符串?别的什么?他们是否与', '.join或CSV模块或其他东西一起加入?

答案 2 :(得分:1)

让我们为你的字符串添加一个案例:

>>> s = '"Jens", "kasper", "Michael", "Jean Paul", "Bond, James"'
                                                        ^^       comma

您可以使用csv:

>>> import csv
>>> list(csv.reader([s], skipinitialspace=True))[0]
['Jens', 'kasper', 'Michael', 'Jean Paul', 'Bond, James']

或正则表达式:

>>> import re
>>> [e.group(1) for e in re.finditer(r'"([^"]+)"',s)]
['Jens', 'kasper', 'Michael', 'Jean Paul', 'Bond, James']

基于逗号拆分的解决方案不适用于嵌入式逗号:

>>> s = '"Jens", "kasper", "Michael"' 
>>> [e.strip().strip('"') for e in s.split(',')]
['Jens', 'kasper', 'Michael', 'Jean Paul', 'Bond', 'James']
                                               ^^^^  wrong answer...

答案 3 :(得分:-1)

我认为dawg最好,但是:

stringthing = "Your string here!=-Hi!"
a = stringthing.split("=-")
print("Thing 1: " + a[0] + " Thing 2: " + a[1])