ReGex Python 方括号和圆括号

ReGex Python brackets and parenthesis

我有几个形式的输入

intput1: 'some text1 \(blabla1\) some text2 \[blabla2\] some text3 \[blabla3\]'
intput2: '\(bla1\) some text'
intput3: '\[bla2\] some text and \[bla3\]'

等等。

((...),[...]的个数和顺序不固定)

对于每个输入,我想要一个 output_i 形式的列表

output_1=[some text1, \(blabla1\),some text2, \[blabla2\], some text3]
output_2=[\(bla1\),some text]
output_3=[\(bla2\),some text and, \[bla3\]]

我尝试使用以下内容:

totreat = re.split(r'\\((.*?)\\)|\\[(.*?)\\]|\\)(.*?)\\(|\\](.*?)\\[|\\)(.*?)\\[|\\](.*?)\\(',src)

没有任何成功

给定一个输入字符串 i,您可以用空格分割该字符串,然后可以使用 itertools.groupby 根据每个子字符串是否以括号开头和结尾来对输出进行分组:

from itertools import groupby
[' '.join(g) for _, g in groupby(i.split(), key=lambda s: s.startswith(('\(', '\[')) and s.endswith(('\)', '\]')))]

这个 returns,给定您的输入字符串分别来自 intput1intput2intput3

['some text1', '\(blabla1\)', 'some text2', '\[blabla2\]', 'some text3', '\[blabla3\]']
['\(bla1\)', 'some text']
['\[bla2\]', 'some text and', '\[bla3\]']