用 Python 中的子字符串分割字符串

时间:2021-05-11 14:53:12

标签: python string

在 Python 中拆分包含带引号的子字符串的字符串的最佳方法是什么?

string = 'foo bar "some substring"'

result = ['foo', 'bar', 'some substring']

我的第一个想法是遍历列表并连接包含引号的列表元素,但我认为还有更漂亮的方法。

2 个答案:

答案 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)]
相关问题