在 Python 中拆分包含带引号的子字符串的字符串的最佳方法是什么?
string = 'foo bar "some substring"'
result = ['foo', 'bar', 'some substring']
我的第一个想法是遍历列表并连接包含引号的列表元素,但我认为还有更漂亮的方法。
答案 0 :(得分:1)
您可以使用内置 split
模块中的 shlex
。
import shlex
texts = 'foo bar "some substring"'
result = shlex.split(texts)
答案 1 :(得分:0)
这比我想象的要困难得多。但是使用 re
,我认为以下内容可以获得您想要的结果。我知道正则表达式非常难看,但它似乎有效。
import re
def quoted_split(s):
def strip_quotes(s):
if s and (s[0] == '"' or s[0] == "'") and s[0] == s[-1]:
return s[1:-1]
return s
return [strip_quotes(p).replace('\\"', '"').replace("\\'", "'") \
for p in re.findall(r'(?:[^"\s]*"(?:\\.|[^"])*"[^"\s]*)+|(?:[^\'\s]*\'(?:\\.|[^\'])*\'[^\'\s]*)+|[^\s]+', s)]