Страницы

Поиск по вопросам

суббота, 13 июля 2019 г.

Как разбить строку по регулярному выражению в Python

Доброго дня! Подскажите, пожалуйста, как составить регулярное выражение и разбить строку такого типа:
Иванов Иван Иванович 12.02.1942 675195, Москва, ул. Ивановых, дом 15, 4512 125345 выдан Орденом Ивановых 11.11.2011.
Соответственно, разбить нужно так чтобы получить колонки: ФИО, Дата, Адрес, Паспорт
Я пробовал так:
pattern = "[А-Я]*[0-9]." df1 = df1.Name.str.split(pattern, expand=True)
но получается криво. Уверен есть вариант значительно лучше.


Ответ

Так как текст неструктурирован, тут помогут только регулярные выражения. Пример:
rx = r'^(?P.*?)\s+(?P\d{2}\.\d{2}\.\d{4})\s+(?P

\d+,\s*.*?)\s+(?P\d{4}\s\d{6}.*)$'
См. демо на regex101.com
^ - начало строки (?P.*?) - любые 0+ символов (как можно меньше) \s+ - 1+ пробелов (?P\d{2}\.\d{2}\.\d{4}) - 2 цифры, точка, 2 цифры, точка, 4 цифры \s+ - 1+ пробелов (?P
\d+,\s*.*?) - 1+ цифр, , 0+ пробелов, любые 0+ символов (как можно меньше) \s+ 1+ пробелов (?P\d{4}\s\d{6}.*) - 4 цифры, пробел, 6 цифр и 0+ любых символов (как можно больше, до конца строки) $ - конец строки
Чтобы эта регулярка работала в pandas, нужно использовать её с extract
df1 = df1.Name.str.extract(rx, expand=True)

Комментариев нет:

Отправить комментарий