我想以最有效的方式在python中分割一个sting,以及最“python-like”的方式。 说我有这个字符串:
s = '"Jens", "kasper", "Michael"'
如何实现以下列表:
names = ["David", "Kasper", "Michael"]
意思是我想在大括号之间删除名称。
答案 0 :(得分:5)
安全地评估表达式节点或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])