ReGex Python括号和括号

时间:2019-01-30 00:23:55

标签: python regex python-3.x pattern-matching brackets

我有几种形式的输入

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)

没有成功

1 个答案:

答案 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(('\)', '\]')))]

给定分别来自intput1intput2intput3的输入字符串,这将返回:

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