Как правильно разбить строку python

Всем привет, у меня есть такая строка

str = "№ 12301220071002428 по п."в" ч.2 ст.158 УК РФ от 09.11.2023"

Мне нужно из нее сделать несколько строк, по типу:

case_num = '12301220071002428 от 09.11.2023'
case_article = 'п."в" ч.2 ст.158'

Что можете посоветовать, пытался сделать через .split(), но выходит очень костыльно.


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

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

Разбирать текст всегда костыльно и еще не точно, это работает только со строкой

import re
my_str = '''"№ 12301220071002428 по п."в" ч.2 ст.158 УК РФ от 09.11.2023"'''
a1=re.search('\d{15,20}',my_str)  #Ищет подряд от 15 до 20 цифр
a2=re.search('от\s?\d{2}\.\d{2}\.\d{4}', my_str) #Ищет "от" пробел или нет пробела, две цифры точка,две цифры точка, четыре цифры

case_num = a1[0]+' '+a2[0]
case_article = (my_str[a1.end():a2.start()]).strip()

print(case_num)
print(case_article)

12301220071002428 от 09.11.2023
по п."в" ч.2 ст.158 УК РФ

(my_str[a1.end():a2.start()]).strip() ,берет из строки str от места где кончается строка a1 до места где начинается строка a2 и обрезает пробелы в начале и конце

→ Ссылка
Автор решения: Алексей Р

Еще пара вариантов:

re.split()

import re

txt = '№ 12301220071002428 по п."в" ч.2 ст.158 УК РФ от 09.11.2023'
tmp = re.split(r' по | УК РФ', txt)
case_num, case_article = tmp[0] + tmp[2], tmp[1]
print(case_num, case_article, sep='\n')

re.sub()

import re

txt = '№ 12301220071002428 по п."в" ч.2 ст.158 УК РФ от 09.11.2023'
case_num,case_article =re.sub(r'^(.*)по\s(п.*)\sУК РФ\s(от.*)$',r'\1\3|\2',txt).split('|')
print(case_num,case_article,sep='\n')

Результат одинаковый:

№ 12301220071002428 от 09.11.2023
п."в" ч.2 ст.158
→ Ссылка