我有几种形式的输入
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)
没有成功
答案 0 :(得分:1)
给定一个输入字符串i
,用空格将其分割,然后可以使用itertools.groupby
根据每个子字符串是否以方括号开头和结尾来对输出进行分组:
from itertools import groupby
[' '.join(g) for _, g in groupby(i.split(), key=lambda s: s.startswith(('\(', '\[')) and s.endswith(('\)', '\]')))]
给定分别来自intput1
,intput2
,intput3
的输入字符串,这将返回:
['some text1', '\\(blabla1\\)', 'some text2', '\\[blabla2\\]', 'some text3', '\\[blabla3\\]']
['\\(bla1\\)', 'some text']
['\\[bla2\\]', 'some text and', '\\[bla3\\]']