Я splitting a string without removing delimiters, помещая полное круглое выражение в круглые скобки. Целью является сопоставление предложений, заканчивающихся одним или несколькими символами [!?] '.Разделение строки без удаления разделителей, но подавление пустых групп захвата
Все замечательно, за исключением того, что я получаю нежелательных пустых групп захвата - как подавить их, по крайней мере, хакерский и наиболее регулярный способ?
>>> re.compile(r'([^!?]*[!?]+)').split('Great customer service! Very happy! Will go again')
['', 'Great customer service!', '', ' Very happy!', ' Will go again']
>>> re.compile(r'([^!?]{2,}[!?]+)').split('Great customer service! Very happy! Will go again')
['', 'Great customer service!', '', ' Very happy!', ' Will go again']
(Это все глубоко вложены в более сложные регулярные выражения и подфункция, так что на самом деле не хочет хаки. Я хочу, чтобы решение было regexish, чтобы я мог сложить его в более сложное регулярное выражение)
В таких случаях обычно лучше использовать совпадение вместо разделения (или что бы то ни было, подобные функции вызываются в python). – Qtax
@Qtax: нет, мне нужно также сохранить несогласованные выражения. Я искренне хочу сделать раскол, а не просто матч. – smci
Эти пустые строки не из групп захвата, они являются результатом разделения. Отбрасывая естественные результаты разделения, сохраняя содержимое групп захвата, вы получаете почти тот же результат, который вы получили бы от 'findall()'. Вы действительно хотите использовать 'split()'? –