在列表中拆分字符串,但保留定界符

时间:2020-03-31 11:49:51

标签: python regex list

我有一个字符串列表:

List = ['aaa', 'bbb ccc', 'ddd (eee)']

我想将带括号的元素拆分为“(”之前的空白处,或者在前面没有空格的情况下拆分为“(”处的文本。但是在这种情况下,我想保留括号。提出了以下代码,如果有空格,这些代码可以工作:

for l in List:
   if re.search('\(', l) != None:
       a,b = re.split(' (?=\()', l)
       print('True')
       List_2.append(a)
       List_2.append(b)
   else:
       List_2.append(l)

print(List_2)

两个问题:首先,是否有一个更清晰的版本,也许使用列表理解。 其次,如何捕获没有空白“ fff(ggg)”的案件。

最终列表应如下所示:

List_correct['aaa', 'bbb ccc', 'ddd', '(eee)', 'fff', '(ggg)']

1 个答案:

答案 0 :(得分:3)

代码:

private String decodeHeader(String SAMLContent) {
    try {
        SAMLContent = URLDecoder.decode(SAMLContent, "UTF-8");
    } catch (UnsupportedEncodingException ex) {
        JOptionPane.showMessageDialog(null, "UEException: " + ex.getMessage());
    }

    byte[] deflatedBytes = Base64.getDecoder().decode(SAMLContent);
    byte[] inflatedBytes = new byte[100*deflatedBytes.length];
    Inflater compressor = new Inflater(true);

    compressor.setInput(deflatedBytes, 0, deflatedBytes.length);

    try {
        int size = compressor.inflate(inflatedBytes);
    } catch (DataFormatException ex) {
        JOptionPane.showMessageDialog(null, "DFException: " + ex.getMessage());
    }

    try {
        return new String(inflatedBytes, "UTF-8");
    } catch (UnsupportedEncodingException ex) {
        JOptionPane.showMessageDialog(null, "UEException: " + ex.getMessage());
    }
    JOptionPane.showConfirmDialog(null, "This shouln't be printed");
    return null;
}

输出:

List = ['aaa', 'bbb ccc', 'ddd (eee)', 'fff(ggg)']
result = [subitem for item in List for subitem in re.split(r"(?:\b|\s)(?=\()", item)]