Что такое регулярные выражения python
Руководство по использованию регулярных выражений Python
Одна из главных задач при работе с текстовыми данными — это создание множества текстовых функций.
Некоторые функции ищут конкретные паттерны в тексте, например, адреса электронной почты или номера телефонов.
Создание этого функционала может казаться довольно тривиальным, но значительно проще использовать модули регулярных выражений.
Например, нужно посчитать количество знаков препинания в конкретном куске текста. Используем отрывок из Диккенса (оригинал).
Как бы вы это сделали?
Достаточно простой путь, к примеру, такой:
Это нормально, но в нашем распоряжении есть модуль re, с ним получается всего 2 строчки кода:
Эта статья посвящена наиболее часто используемым паттернам регулярных выражений, а также некоторым функциям регулярных выражений.
Проще говоря, регулярное выражение используется для поиска паттернов в указанной строке.
Паттерном может быть все что угодно.
Можно создавать паттерны соответствия электронной почте или мобильному номеру. Можно создать паттерны, которые ищут слова в строке, начинающиеся на “a” и заканчивающиеся на “z”.
Я использую этот инструмент всегда, когда мне нужно протестировать регулярное выражение. Так значительно быстрее, чем запускать python снова и снова, и гораздо проще при отладке.
Теперь мы знаем, что можем найти паттерны в целевой строке, но как создавать эти паттерны?
Создание паттернов
Первое, что нужно освоить в работе с регулярными выражениями, — это создание паттернов.
Рассмотрим некоторые наиболее часто используемые паттерны.
Простейший паттерн — это просто строка.
Но это не очень полезно. Для создания сложных паттернов регулярные выражения содержат специальные символы/операторы. Давайте рассмотрим эти операторы по очереди.
1. Оператор “ [ ]»
Этот оператор использовался в первом примере. Мы ищем любой из символов в квадратных скобках.
[abc] — найдет a, b, и c.
[a-z] — найдет все значения от a до z.
[a-z0–9A-Z] — найдет значения от a до z, от A до Z и от 0 до 9.
В Python этот паттерн использовать легко:
2. Оператор точки
Оператор точки (.) используется для поиска соответствия любому единичному символу, кроме символа новой строки.
Самое классное в этом операторе то, что его можно использовать в сочетании с другими.
Например, нужно найти в строке подстроки длиной в 6 знаков, начинающиеся с маленькой “d” и заканчивающиеся маленькой “e”.
3. Некоторые метапоследовательности
Некоторые паттерны используются постоянно. Для них существуют шорткаты. Вот самые часто используемые:
\W — соответствие любому символу, кроме буквенного и цифрового символа и знака подчёркивания.
\D — соответствие любому нецифровому символу.
4. Операторы “+” и “*”
Символ точки используется для поиска единичного символа. Что если нам нужно найти больше?
Символ + используется для 1 или более значений крайнего левого символа.
Символ * используется для 0 или более значений крайнего левого символа.
Например, если нужно найти все подстроки, начинающиеся с “d” и заканчивающиеся на “e”, нам может встретиться ноль или более символов между “d” и “e”. Используем: d\w*e
Если нужно найти все подстроки, начинающиеся с “d” и заканчивающиеся на “e” с как минимум одним символом между “d” и “e”, используем: d\w+e
Также можно применить более общий подход с добавлением “< >”
\w
\w
\w
Оператор “^” выделяет начало строки, а “$” выделяет конец строки.
6. Границы слов
Вы заметили, что в примерах выше я всегда выделял подстроки, а не слова?
Что если нужно найти все слова, начинающиеся с “d”?
Функции регулярных выражений
1. findall
Ввод: паттерн и тестовая строка.
Вывод: список строк.
2. Поиск
Ввод: паттерн и тестовая строка.
Вывод: местоположение первого совпадения объекта.
Данные местоположения объекта получим, используя:
3. Замена
Это еще одна прекрасная функциональность. При работе с NLP иногда нужно заменить целые числа иксами или отредактировать какой-то документ. Простая функция “найти и заменить” в любом текстовом редакторе.
Ввод: паттерн поиска, паттерн замены и целевая строка
Вывод: измененная строка
Некоторые примеры применения:
Регулярные выражения используются во многих случаях, когда нужна проверка данных. Вы наверняка видели на веб-сайтах подсказки вроде “этот адрес электронной почты не действителен”. Такая подсказка может быть написана с помощью нескольких условий if и else, но регулярные выражения в данном случае удобнее.
1. PAN номера
В Индии используются PAN номера для налоговой идентификации вместо SSN номеров в США. Основной критерий действительности PAN — все буквы должны быть заглавными, а символы должны располагаться в следующем порядке:
‘ABcDE1234L’ — действительный PAN?
Как решается эта задача без регулярных выражений? Возможно, будет написан цикл for с индексом, проходящим через строку. С регулярными выражениями все проще:
2. Поиск доменных имен
Иногда в большом текстовом документе нужно найти телефонные номера, адреса электронной почти или доменные номера.
Возьмем для примера такой текст:
А нужно найти все основные домены в тексте askoxford.com; bnsf.com; hydrogencarsnow.com; mrvc.indianrail.gov.in; web.archive.org
| — здесь это оператор or, который возвращает наборы, содержащие паттерн внутри ().
3. Find Email Addresses:
Вот регулярное выражение, которое ищет адрес электронной почты в тексте:
Это продвинутые примеры, но их понимание поможет вам усвоить полученную информацию.
Заключение
Хотя сперва регулярные выражения могут выглядеть устрашающе, они предоставляют великолепную гибкость при манипулировании данными, создании функций и поиске паттернов.
В работе с текстовыми данными я использую их очень часто, а также включаю их в работу над проверкой данных.
Еще я большой поклонник инструмента regex101 и использую его для проверки работы регулярных выражений. Не думаю, что использовал бы регулярные выражения так часто, если бы не этот прекрасный инструмент.
Руководство по использованию регулярных выражений Python
Sep 6, 2019 · 8 min read
Одна из главных задач при работе с текстовыми данными — это создание множества текстовых функций.
Некоторые функции ищут конкретные паттерны в тексте, например, адреса электронной почты или номера телефонов.
Создание этого функционала может казаться довольно тривиальным, но значительно проще использовать модули регулярных выражений.
Например, нужно посчитать количество знаков препинания в конкретном куске текста. Используем отрывок из Диккенса (оригинал).
Как бы вы это сделали?
Достаточно простой путь, к примеру, такой:
Это нормально, но в нашем распоряжении есть модуль re, с ним получается всего 2 строчки кода:
Эта статья посв я щена наиболее часто используемым паттернам регулярных выражений, а также некоторым функциям регулярных выражений.
Проще говоря, регулярное выражение используется для поиска паттернов в указанной строке.
Паттерном может быть все что угодно.
Можно создавать паттерны соответствия электронной почте или мобильному номеру. Можно создать паттерны, которые ищут слова в строке, начинающиеся на “a” и заканчивающиеся на “z”.
Я использую этот инструмент всегда, когда мне нужно протестировать регулярное выражение. Так значительно быстрее, чем запускать python снова и снова, и гораздо проще при отладке.
Теперь мы знаем, что можем найти паттерны в целевой строке, но как создавать эти паттерны?
Создание паттернов
Первое, что нужно освоить в работе с регулярными выражениями, — это создание паттернов.
Рассмотрим некоторые наиболее часто используемые паттерны.
Простейший паттерн — это просто строка.
Но это не очень полезно. Для создания сложных паттернов регулярные выражения содержат специальные символы/операторы. Давайте рассмотрим эти операторы по очереди.
1. Оператор “ [ ]»
Этот оператор использовался в первом примере. Мы ищем любой из символов в квадратных скобках.
В Python этот паттерн использовать легко:
2. Оператор точки
Оператор точки (.) используется для поиска соответствия любому единичному символу, кроме символа новой строки.
Самое классное в этом операторе то, что его можно использовать в сочетании с другими.
Например, нужно найти в строке подстроки длиной в 6 знаков, начинающиеся с маленькой “d” и заканчивающиеся маленькой “e”.
3. Некоторые метапоследовательности
Некоторые паттерны используются постоянно. Для них существуют шорткаты. Вот самые часто используемые:
\W — соответствие любому символу, кроме буквенного и цифрового символа и знака подчёркивания.
\D — соответствие любому нецифровому символу.
4. Операторы “+” и “*”
Символ точки используется для поиска единичного символа. Что если нам нужно найти больше?
Символ + используется для 1 или более значений крайнего левого символа.
Символ * используется для 0 или более значений крайнего левого символа.
Например, если нужно найти все подстроки, начинающиеся с “d” и заканчивающиеся на “e”, нам может встретиться ноль или более символов между “d” и “e”. Используем: d\w*e
Если нужно найти все подстроки, начинающиеся с “d” и заканчивающиеся на “e” с как минимум одним символом между “d” и “e”, используем: d\w+e
Также можно применить более общий подход с добавлением “< >”
\w
\w
\w
Оператор “^” выделяет начало строки, а “$” выделяет конец строки.
6. Границы слов
Вы заметили, что в примерах выше я всегда выделял подстроки, а не слова?
Что если нужно найти все слова, начинающиеся с “d”?
Функции регулярных выражений
1. findall
Ввод: паттерн и тестовая строка.
2. Поиск
Ввод: паттерн и тестовая строка.
Вывод: местоположение первого совпадения объекта.
Данные местоположения объекта получим, используя:
3. Замена
Это еще одна прекрасная функциональность. При работе с NLP иногда нужно заменить целые числа иксами или отредактировать какой-то документ. Простая функция “найти и заменить” в любом текстовом редакторе.
Ввод: паттерн поиска, паттерн замены и целевая строка
Вывод: измененная строка
Некоторые примеры применения:
Регулярные выражения используются во многих случаях, когда нужна проверка данных. Вы наверняка видели на веб-сайтах подсказки вроде “этот адрес электронной почты не действителен”. Такая подсказка может быть написана с помощью нескольких условий if и else, но регулярные выражения в данном случае удобнее.
1. PAN номера
В Индии используются PAN номера для налоговой идентификации вместо SSN номеров в США. Основной критерий действительности PAN — все буквы должны быть заглавными, а символы должны располагаться в следующем порядке:
‘ABcDE1234L’ — действительный PAN?
Как решается эта задача без регулярных выражений? Возможно, будет написан цикл for с индексом, проходящим через строку. С регулярными выражениями все проще:
2. Поиск доменных имен
Иногда в большом текстовом документе нужно найти телефонные номера, адреса электронной почти или доменные номера.
Возьмем для примера такой текст:
А нужно найти все основные домены в тексте askoxford.com; bnsf.com; hydrogencarsnow.com; mrvc.indianrail.gov.in; web.archive.org
| — здесь это оператор or, который возвращает наборы, содержащие паттерн внутри ().
3. Find Email Addresses:
Вот регулярное выражение, которое ищет адрес электронной почты в тексте:
Это продвинутые примеры, но их понимание поможет вам усвоить полученную информацию.
Заключение
Хотя сперва регулярные выражения могут выглядеть устрашающе, они предоставляют великолепную гибкость при манипулировании данными, создании функций и поиске паттернов.
В работе с текстовыми данными я использую их очень часто, а также включаю их в работу над проверкой данных.
Еще я большой поклонник инструмента regex101 и использую его для проверки работы регулярных выражений. Не думаю, что использовал бы регулярные выражения так часто, если бы не этот прекрасный инструмент.
Модуль re Python – осваиваем регулярные выражения Python
Цель : | Поиск и изменение текста с помощью шаблонов. |
Доступно в версиях : | 1.5 и более поздних. |
Регулярные выражения Python – это шаблоны для поиска, описываемые с помощью специального синтаксиса. Термин «регулярные выражение» (“regular expressions”) часто сокращается до “regex” или “regexp”. Выражения могут включать в себя строки текста, повторы, составные шаблоны, ветвления и другие сложные правила.
Регулярные выражения чаще всего применяются для обработки текста. Например, в шаблонах поиска, в редакторах текста и современных IDE. Они также являются важной частью таких утилит командной строки Unix: sed, grep и awk.
В C, C++ и Python поддержка регулярных выражений реализована с помощью подключаемых библиотек.
Существует несколько спецификаций регулярных выражений с открытым исходным кодом. Каждая из них использует базовый синтаксис, но имеет различные расширения дополнительного функционала. Синтаксис, используемый в модуле re, основан на синтаксисе языка программирования Perl с улучшениями, свойственными для Python.
Поиск в тексте по шаблону
Наиболее часто модуль re Python используется для поиска в тексте по шаблону. Приведенный ниже пример ищет слова ‘this’ и ‘that’ в строке текста.
Метод search() принимает шаблон, а также текст для поиска, и возвращает объект Match, когда найдено соответствующая строка. Если нет, то search() возвращает значение None.
Объект Match содержит оригинал исходной строки, использованное регулярное выражение и позицию в тексте, где найдено совпадение.
Методы start() и end() содержат целочисленные индексы строки, обозначающие, где встречается подходящий под шаблон текст.
Компиляция выражений
Модуль re включает в себя функции для работы с регулярными выражениями. Но он более эффективен при компиляции выражений, которые использует программа. Функция compile() преобразует выражение в объект RegexObject.
Функции модуля поддерживают кэш. Но его размер ограничен, поэтому можно избежать лишней нагрузки на сервер при запросе из кэша. Благодаря чему вы перемещаете компиляцию на время старта приложения.
Множественные вхождения
До этого момента все шаблоны в приведенных примерах использовали метод search() для поиска единичного вхождения строки. Функция findall() возвращает все подстроки из текста, которые совпадают с шаблоном.
Подстрока ab встречается дважды.
Метод finditer() возвращает итератор, который создает объекты Match вместо строк, возвращаемых методом findall().
Этот пример находит те же два вхождения подстроки ab, а объект Match показывает их место в оригинальной строке.
Синтаксис шаблонов
Функция test_patterns() отображает текст, позиции символов, а также набор строк, соответствующий каждому шаблону.
Повторы
Существует пять способов задать повтор символов в шаблоне. Паттерн, за которым следует метасимвол *, повторяется ноль или более раз. При этом ноль значит, что он не обязан присутствовать в тексте.
Чтобы задать ограниченное количество вхождений, используйте
Заметьте, насколько больше вхождений у шаблонов ab* и ab?, чем у ab+.
Стандартная обработка инструкции повторения заключается в том, чтобы добавить в результат как можно больше символов, пока результат соответствует шаблону. Это так называемое жадное поведение, которое может находить меньшее количество отдельных совпадений. Либо совпадения могут включать в себя больше исходного текста, чем требовалось. Такое поведение паттерна можно отключить с помощью символа «?», следующего за инструкцией повторения.
Отмена жадного потребления исходного текста для шаблона, в котором допускается ноль вхождений b, означает, что подходящая подстрока может вообще не включать в себя b.
Наборы символов
Наборы символов – это группы символов, каждый из которых может соответствовать определённому месту в шаблоне. Например, шаблону [ab] соответствует a или b.
«Жадный» вариант шаблона a[ab]+ вернет всю строку целиком, поскольку первый символ – это a, а каждый последующий – либо a, либо b.
Набор символов также может быть использован для исключения определённых значений. Специальный маркер «^» включает поиск символов, не входящих в следующий за ним набор.
Этот шаблон находит все подстроки, которые не содержат символы «-», «.» или пробелы.
По мере увеличения набора поиск каждого символа становится трудоёмким. Компактный формат шаблона с использованием диапазонов позволяет определить набор символов, включающий в себя все последовательные символы между стартовым и конечным.
Диапазон a-z это строчные буквы ASCII, а диапазон A-Z — заглавные буквы ASCII.
Особым случаем является метасимвол точки (.), который означает, что шаблон должен соответствовать любому единичному символу на этой позиции.
Сочетание точки с метасимволом повтора может привести к длинным совпадениям, если только не используется нежадная форма поиска.
Escape-коды
Более компактное представление шаблона использует символьные коды для поиска нескольких наборов символов. Escape-коды, использующиеся в модуле re:
Код | Значение |
d | Цифра. |
D | Не цифра. |
s | Пробел (табуляция, пробел, новая строка и т.п.). |
S | Не пробел. |
w | Буква или цифра. |
W | Не буква и не цифра. |
Escape-коды начинаются с обратного слеша (). Но в коде Python этот символ должен быть экранирован. Использование литерала r решает эту проблему.
Эти шаблоны используют символьные коды с повторами, чтобы найти последовательности символов в исходной строке.
Чтобы создать шаблон для поиска символов, являющих частью синтаксиса регулярных выражений, используйте экранирование.
Эти шаблоны экранируют символы обратного слеша и плюса, поскольку оба имеют особое назначение в регулярном выражении.
Привязка
Также можно указать относительное местоположение в исходной строке, в котором шаблон должен появляться.
Код | Значение |
^ | начало текста или строки |
$ | конец текста или строки |
A | начало текста |
Z | конец текста |
b | пустой символ в начале или конце слова |
B | пустой символ не с начала и не с конца слова |
В этом примере шаблоны для поиска слов в начале и в конце строки отличаются. За словом в конце строки следует знак пунктуации, заканчивающий предложение. Шаблон w+$ не подойдёт, поскольку точка не обозначает букву или цифру.
Ограничение поиска
Если известно, что поиск будет осуществляться только в части исходной строки, можно ещё больше упростить шаблон, указав модулю re ограничить диапазон поиска. Например, если искомая строка должна находиться в начале, тогда использование метода match() вместо search() привяжет поиск к началу текста без применения в выражении специального символа.
Строка is расположена не в начале текста, поэтому она не находится с помощью метода match(). Но эта последовательность появляется в тексте два раза, поэтому метод search() находит её.
Метод search()принимает необязательные параметры начальной и конечной позиций, чтобы ограничить поиск до части исходной строки.
Этот пример реализует менее эффективную форму метода iterall(). Каждый раз, когда находится совпадение, конечная позиция этого совпадения используется для следующего поиска.
Группировка в шаблонах
Добавление групп в шаблон позволяет изолировать части совпадающего текста, расширяя возможности для разбора строк. Группы определяются заключением шаблонов в круглые скобки.
Любое регулярное выражение может быть включено в более крупное выражение. Все модификаторы повторов могут быть применены к группе как к единому целому, требуя повторения группы в шаблоне.
Чтобы найти части строки, совпадающие с каждой отдельной группой в шаблоне, используйте метод groups() объекта Match.
Match.groups() возвращает последовательность строк в порядке чередования групп в шаблоне.
Если вам не нужны все части, которые соответствуют группам, можно искать совпадение только по одной группе при помощи метода group().
Группа 0 представляет собой строку, совпадающую со всем регулярным выражением. Подгруппы пронумерованы, начиная с 1 в порядке чередования в выражении.
Используйте метод groupdict(), чтобы получить словарь, сопоставляющий имена групп с совпадающими подстроками. Именованные шаблоны также включаются в упорядоченную последовательность метода groups().
Обновлённая версия функции test_patterns(), показывающая нумерованные и именованные группы совпадений по шаблону, облегчит понимание следующих примеров.
Группы могут наследовать другие группы для создания более сложных выражений.
В данном случае группе (a*) соответствует пустая строка, поэтому метод groups() вернет пустую строку как подходящее значение.
Группы также полезны для создания альтернативных шаблонов. Используйте символ «|» для поиска строки, которая должна соответствовать одному или нескольким шаблонам.
Первое выражение в примере совпадает с последовательностью символов a, за которой следует строка из одной буквы a или b. Второй шаблон совпадает с последовательностью символов a, за которой следует строка, которая может включать в себя как a, так и b. Шаблоны похожи, но результат их работы разный.
Когда в строке нет совпадений с альтернативной группой, но весь шаблон имеет совпадения, то результат работы метода groups() равен None в том месте, где должна располагаться альтернативная группа.
Сравните группы, возвращаемые для захватных и незахватных групп шаблона, которым соответствуют одинаковые результаты.
Опции поиска
Для изменения обработки регулярных выражений используйте флаги. Они могут объединяться, используя битовую операцию «или», и передаваться в compile(), search(), match()и другие функции, которые принимают шаблон для поиска.
Регистронезависимый поиск
Использование флага IGNORECASE приводит к тому, чтобы буквенные символы и буквенные диапазоны в шаблоне будут совпадать как для строчных, так и для заглавных букв.
Поскольку выражение включает в себя букву «T», то без использования IGNORECASE единственным подходящим словом будет «This». А когда регистр игнорируется, слово «text» также подходит.
Исходный текст из нескольких строк
Шаблону в этом примере соответствуют первое или последнее слово исходной строки. Ему соответствует line. в конце текста даже при том, что там нет символа новой строки.
DOTALL – ещё один флаг для настройки поиска в многострочном тексте. Символу точки в шаблоне соответствует всё, кроме символа новой строки. Данный флаг позволяет символу новой строки также соответствовать метасимволу «.».
Без этого флага каждая строка исходного текста совпадает с шаблоном по отдельности. Добавление флага приводит к тому, что под шаблон подходит весь текст.
Unicode
В Python 2 объекты str используют набор символов ASCII. Поэтому шаблон и исходный текст должны быть представлены в кодировке ASCII. Escape-коды, описанные выше, также по умолчанию определяются в терминах ASCII.
Вследствие этого шаблону w+ будет соответствовать слово “French”, но не слово “Français”, поскольку ç не является частью набора символов ASCII. Чтобы включить поиск по символам Unicode в Python 2, добавьте флаг UNICODE при компиляции шаблона.
Другие Escape-последовательности (W, b, B, d, D, s и S) также иначе обрабатываются для текста в кодировке Unicode. Поэтому обработчик регулярных выражений использует базу Unicode для поиска свойств каждого символа.
Python 3 по умолчанию использует Unicode для всех строк, поэтому данный флаг не требуется.
Многословные регулярные выражения
Это регулярное выражение уже сложное. В нём несколько классов символов, групп и повторов.
Преобразование шаблона в многословный формат облегчит его расширение.
Этому регулярному выражению соответствуют те же строки, но в расширенном формате его легче читать. Комментарии также помогают различать части шаблона.
Данная версия шаблона разбивает строки, включающие в себя имя пользователя и email- адрес так, как они могут отображаться в заголовке письма. Сначала следует имя, и оно отделено от email-адреса в угловых скобках ( ).
Возможность вставлять комментарии в многословное регулярное выражение помогает в поддержке кода. Финальная версия шаблона содержит заметки по его реализации для разработчиков. А также пробелы для отделения групп друг от друга и выделения их иерархии.
Включение флагов в шаблоны
Также можно добавлять флаги в само регулярное выражение. Например, чтобы включить регистронезависимый поиск, добавьте (?i)в начало шаблона.
Поскольку параметры контролируют способ обработки всего регулярного выражения, они должны указываться в начале шаблона.
Аббревиатуры всех флагов приведены ниже:
Флаг | Аббревиатура |
IGNORECASE | I |
MULTILINE | M |
DOTALL | S |
UNICODE | U |
VERBOSE | X |
Включённые в регулярное выражение флаги можно объединять путём размещения в одной группе. Например, (?imu) включает регистронезависимый поиск по многострочному тексту в кодировке Unicode.
Поиск вперёд или назад
Иногда нужно сопоставить часть шаблона, только если для другой его части также будет найдено совпадение. Например, в регулярном выражении для разбора email-адреса обе угловые скобки были помечены как необязательные. В реальности скобки должны быть парными.
Приведенная ниже версия регулярного выражения использует утверждение положительного поиска вперёд для поиска пары. Синтаксис поиска вперёд следующий:
В этой версии регулярного выражения есть несколько важных изменений. Теперь имя получателя не является обязательным. Это означает, что одни лишь адреса не пройдут проверку. Что также уберегает от пар имя/адрес, имеющих некорректный формат.
Правило положительного поиска вперёд означает, что оставшаяся часть строки заключена в пару угловых скобок или не должна быть непарной скобки. То есть либо присутствуют обе скобки, либо ни одной.
Соответствие для группы поиска вперёд не захватывает никакой части текста, поэтому остаток шаблона продолжает искать соответствие с того же места, где найдено соответствие.
Утверждение негативного поиска вперёд ((?!pattern)) говорит, что текст с этого места не должен соответствовать шаблону. Например, шаблон распознавания email-адреса может быть изменён, чтобы игнорировать адреса noreply, которые часто используются автоматическими системами.
Адреса, начинающиеся с noreply, не подходят под шаблон, поскольку утверждение поиска вперёд не работает.
Синтаксис g также работает с пронумерованными ссылками, и его использование исключает путаницу между номерами групп и окружающими их цифровыми символами.
Передача значения счёта позволяет ограничить количество производимых замен.
Сделана только одна замена, поскольку count равен 1.
Метод subn() работает так же, как sub(), за исключением того, что он возвращает как изменённую строку, так и количество произведённых замен.
Поиск по шаблону нашёл два соответствия.
Разбиение строк с помощью шаблонов
str.split() – один из часто используемых методов разбиения строк для их последующего разбора. Но он поддерживает только символьные значения в качестве разделителей. А иногда необходимо регулярное выражение, если исходный текст отформатирован неодинаково. Например, многие языки разметки текста определяют разделители параграфов как два (или более) символа новой строки (n). В этом случае str.split() не может быть использован.
Стратегия определения параграфов с помощью метода findall() использовала бы шаблон вроде (.+?)n<2,>.
Этот шаблон не смог бы найти параграф в конце текста, как показано в примере: “Paragraph three.” не является частью вывода.
Расширение регулярного выражения так, чтобы он искал параграф с двумя (или более) символами новой строки, решает проблему, но усложняет шаблон. Использование re.split() вместо re.findall() справляется с проблемой разделения параграфов автоматически и позволяет ограничиться простым шаблоном.
Аргумент шаблона в методе split() более точно отражает спецификацию разметки: два (или более) символа новой строки обозначают разделение между параграфами исходного текста.
Заключение регулярного выражения в скобки, чтобы определить группу, заставляет метод split() работать как str.partition(). После этого он возвращает значения разделителей вместе с остальными частями строки.
Теперь вывод включает в себя каждый параграф, а также последовательность символов новой строки, которые разделяют параграфы.
re – стандартная документация библиотеки модуля.
Regular Expression HOWTO – введение в регулярные выражения для Python-разработчиков от Эндрю Кучлинга.
Kodos – интерактивный инструмент тестирования регулярных выражений от Фила Шварца.
Википедия: регулярные выражения – введение и основные понятия, концепции и техники работы с регулярными выражениями.
locale – модуль для установки конфигурации при работе с текстом в кодировке Unicode.
Пожалуйста, оставьте ваши мнения по текущей теме статьи. За комментарии, отклики, лайки, дизлайки, подписки огромное вам спасибо!
Пожалуйста, опубликуйте свои комментарии по текущей теме статьи. За комментарии, лайки, подписки, дизлайки, отклики низкий вам поклон!