0

我想以最有效的方式和最“类似python”的方式在python中分割一个刺痛。假设我有这个字符串:

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

如何实现以下列表:

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

意思是我想去掉大括号之间的名字。

4

4 回答 4

5

使用ast.literal_eval()

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

>>> from ast import literal_eval
>>> s = '"Jens", "kasper", "Michael"' 
>>> literal_eval(s)
('Jens', 'kasper', 'Michael')
>>> list(literal_eval(s))
['Jens', 'kasper', 'Michael']
于 2013-10-01T22:16:41.747 回答
3

您可以像这样拆分它:

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

您可以像这样去掉引号:

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

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

于 2013-10-01T22:18:59.830 回答
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...
于 2013-10-01T22:39:26.350 回答
-1

我认为 dawg 有最好的,但是:

stringthing = "Your string here!=-Hi!"
a = stringthing.split("=-")
print("Thing 1: " + a[0] + " Thing 2: " + a[1])
于 2019-12-06T20:33:25.020 回答