Как разделить строку методом re.split по шаблону сепаратора re. выражения?

import re

string = 'м/к 6м 07.11.17 3м 30.05.18 м/к 6м 28.04.21/конс.п/тер 13.07.21 м/к 6мес 08.11.21 м/к 6мес (1ф) 13.05.22'

re.split(r"(\d{2}.\d{2}.\d{2,4}[;\s]?)", string)  

У меня получается так:

['м/к 6м 07', '11.17 3', 'м 30', '05.18 ', 'м/к 6м 28', '04.21/', 'конс.п/тер 13', '07.21 ', 'м/к 6мес 08', '11.21 ', 'м/к 6мес (1ф) 13.05.22']

Мне необходимо получить список такого содержания

['м/к 6м 07.11.17', '3м 30.05.18', 'м/к 6м 28.04.21', 'конс.п/тер 13.07.21', 'м/к 6мес 08.11.21', 'м/к 6мес (1ф) 13.05.22']

Строка должна быть разделена по дате, дата конец строки. Помогите решить эту задачу :)


Ответы (1 шт):

Автор решения: CrazyElf

Да в принципе даже с не экранированной точкой будет работать, если сделать наоборот поиск, а не разбиение, но добавить не-жадный шаблон для произвольной строки спереди и "хвост" убрать из скобок, чтобы не захватывался:

import re

string = 'м/к 6м 07.11.17 3м 30.05.18 м/к 6м 28.04.21/конс.п/тер 13.07.21 м/к 6мес 08.11.21 м/к 6мес (1ф) 13.05.22'

re.findall(r"(.*?\d{2}.\d{2}.\d{2,4})[;\s]?", string)

На выходе:

['м/к 6м 07.11.17 ',
 '3м 30.05.18',
 'м/к 6м 28.04.21',
 '/конс.п/тер 13.07.21 ',
 'м/к 6мес 08.11.21',
 'м/к 6мес (1ф) 13.05.22']

Для более произвольного количества цифр в числах можно так, но точку тогда лучше всё-таки экранировать:

re.findall(r"(.*?\d+\.\d+\.\d+)[;\s]?", string)  
→ Ссылка