我想在python中分裂一个最有效的方式,并且是最“类似python”的方式。 说我有这个字符串:在python中分割字符串
s = '"Jens", "kasper", "Michael"'
如何实现以下列表:
names = ["David", "Kasper", "Michael"]
含义我想剥离大括号中的名字。
我想在python中分裂一个最有效的方式,并且是最“类似python”的方式。 说我有这个字符串:在python中分割字符串
s = '"Jens", "kasper", "Michael"'
如何实现以下列表:
names = ["David", "Kasper", "Michael"]
含义我想剥离大括号中的名字。
安全评估的表达式节点或Unicode或Latin-1的编码含有一个Python表达式 字符串。提供的字符串或节点可能只包含以下Python文字结构:字符串, 数字,元组,列表,字典,布尔值和无。
>>> from ast import literal_eval
>>> s = '"Jens", "kasper", "Michael"'
>>> literal_eval(s)
('Jens', 'kasper', 'Michael')
>>> list(literal_eval(s))
['Jens', 'kasper', 'Michael']
您可以像这样把它分解:
>>> s = '"Jens", "kasper", "Michael"'
>>> s.split(', ')
['"Jens"', '"kasper"', '"Michael"']
可以剥去引号是这样的:
>>> [name.strip('"') for name in s.split(', ')]
['Jens', 'kasper', 'Michael']
不过说真的,你应该考虑这个奇怪的字符串是如何构造,并进行匹配操作,而不是试图从第一原则构建解析器。这些Python文字是? JSON字符串?还有别的吗?他们是否与', '.join
或CSV模块或其他东西结合在一起?
当然,这不会奇迹般地大写'kasper'或将'Jens'转换成'David' ......如果你真的想要这样做,你需要更全面的规范你的想法。 – abarnert
让我们的情况下添加到您的字符串:
>>> 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...
我假设你的列表是为了Jens而不是David,对吧? – Ben
“剥去花括号之间的名字” - 你的意思是“提取引号之间的名字”? – Blorgbeard
你是如何得到这个字符串的? – abarnert