Как правильно разбить строку 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