Python 将字符串拆分为多个部分(使用regexps?)

Python 将字符串拆分为多个部分(使用regexps?),python,string,python-3.x,parsing,split,Python,String,Python 3.x,Parsing,Split,源于答案的问题 我们收到一个“输入”字符串 输入字符串被++s(即\s++\+\s++regexp)拆分为几个“命令”。但是,在拆分时,应忽略引用的+(\+) 然后,每个命令都会被空格字符拆分为几个“参数”,但在拆分时不计算带引号的(\)空格,而是成为参数的一部分 被引用的\(即\)变为规则字符\,并且自身不参与引用 我的解决方案是逐字符处理输入字符串,并对\、+和空白字符进行特殊处理。这是缓慢而不优雅的。我要求另一种解决方案(例如使用regexp) 我用Python 3编写 比如说, fil

源于答案的问题

我们收到一个“输入”字符串

输入字符串被
++
s(即
\s++\+\s++
regexp)拆分为几个“命令”。但是,在拆分时,应忽略引用的
+
\+

然后,每个命令都会被空格字符拆分为几个“参数”,但在拆分时不计算带引号的(
\
)空格,而是成为参数的一部分

被引用的
\
(即
\
)变为规则字符
\
,并且自身不参与引用

我的解决方案是逐字符处理输入字符串,并对
\
+
和空白字符进行特殊处理。这是缓慢而不优雅的。我要求另一种解决方案(例如使用regexp)

我用Python 3编写


比如说,

filter1 + \
chain -t http://www.w3.org/1999/xhtml -n error + \
transformation filter2 --arg x=y
变换滤波器3

变成

[['filter1'],
 ['chain', '-t', 'http://www.w3.org/1999/xhtml', '-n', 'error'],
 ['transformation', 'filter2', '--arg', 'x=y']]
 [['a', '+', 'b'], ['c d']]

变成

[['filter1'],
 ['chain', '-t', 'http://www.w3.org/1999/xhtml', '-n', 'error'],
 ['transformation', 'filter2', '--arg', 'x=y']]
 [['a', '+', 'b'], ['c d']]

这是你问题的答案

这里的函数get\u splitted\u strings\u for()接受字符串s类型的1个参数,并将1除以1、2次,最后将结果存储在2d列表中


我写了自己版本的程序:

import re


def split_pipeline(s):
    res = [['']]
    r = r'\\\\|\\\+|\\\s|\s+\+\s+|\s+|[^\s\\]+'
    for m in re.finditer(r, s, re.M|re.S):
        if m[0][0] == '\\':
            res[-1][-1] += m[0][1:]
        elif re.match(r'^\s+\+\s+$', m[0], re.M|re.S):
            res.append([''])
        elif re.match(r'^\s+$', m[0], re.M | re.S):
            res[-1].append('')
        else:
            res[-1][-1] += m[0]
    return res

print(split_pipeline(r'a\\ \+  b + c\ d'))
# [['a\\', '+', 'b'], ['c d']]

请给出一个输入和预期输出的示例(您希望在拆分后获得)。@hygull examples添加如果没有人解决,我将尝试解决,实际上我现在正在移动中。明白了。谢谢。最后,我在rextester解决了你的手机问题。疯狂的令人兴奋的问题。我现在正在写答案。谢谢。如果您将获得
[[['a'、'+'、'b']、['c'、'd']]
而不是
[[a'、'+'、'b']、['cd']
,该怎么办。实际上,在第一次拆分操作之后,两者都包含用于分隔的空间,否则我们需要为此类操作传递额外的参数。我也试图获得第二个结果,但第一个结果失败了,所以我猜我们可能需要额外的参数。所以我想,如果你愿意或者如果我建议的O/P是好的,那么我会编辑或者我会尝试其他方法来解决。谢谢,错了!应该是
[['a'、'+'、'b']、['cd']]
好吧,对不起,让我来解决这个问题。谢谢。我试着用几种方法获得第二个输出,但是我在子字符串中得到了空格。所以我建议如果
[['a','+','b'],['c','d']]
对您有所帮助,那么它会更好,否则它会在函数的参数列表中引入额外的参数,这同样需要您方的更多输入。目前,我只更新了这个问题的答案。谢谢。我不明白你的意思:“帮助你,这样会更好,否则它会引入额外的参数”。这是什么意思?我想这不是必须的,让我从其他方面试试。非常感谢。