我想在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