ReGex Python скобки и скобки - PullRequest
       12

ReGex Python скобки и скобки

0 голосов
/ 30 января 2019

У меня есть несколько входов в форме

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 голосов
/ 30 января 2019

Учитывая входную строку 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\\]']
...