MicroPython:Библиотеки/ure

Материал из Онлайн справочника
Версия от 18:17, 14 мая 2023; EducationBot (обсуждение | вклад)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигацииПерейти к поиску

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Модуль ure – простые регулярные выражения[1]

В этом модуле реализована часть функционала соответствующего модуля CPython. Более подробно читайте в документации к CPython о модуле re.

В этом модуле реализованы операции с регулярными выражениями. Если точнее, часть синтаксиса регулярных выражений из CPython’овского модуля re (по сути, это расширенные регулярные выражения POSIX).

Операторы и специальные последовательности, поддерживаемые в модуле ure:

  • . – соответствует любому символу.
  • [...] – соответствует набору символов. Поддерживаются как отдельные символы, так и диапазоны символов, включая наборы с отрицанием (например, [^a-c]).
  • ^ – соответствует началу строки.
  • $ – соответствует концу строки.
  • ? – соответствует нулю или одному повторению последнего символа из шаблона слева.
  • * – соответствует нулю или более повторений последнего символа из шаблона слева.
  • + – соответствует одному или более повторений последнего символа из шаблона слева.
  • ?? – не жадная (ленивая) версия ?; соответствует нулю или одному повторению последнего символа из шаблона слева (с предпочтением к нулю повторений).
  • *? – не жадная (ленивая) версия *; соответствует нулю или более повторений последнего символа из шаблона слева (с предпочтением к наиболее короткому повторению).
  • +? – не жадная (ленивая) версия +; соответствует одному или более повторений последнего символа из шаблона слева (с предпочтением к наиболее короткому повторению).
  • | – соответствует левой или правой части шаблона.
  • (...) – группировка регулярных выражений. Доступ к подстрокам, выловленным с помощью группировки, можно получить при помощи метода match.group().
  • \d – соответствует любой цифре. Эквивалент [0-9].
  • \D – соответствует любому нечисловому значению. Эквивалент [^0-9].
  • \s – соответствует любому пробельному символу. Эквивалент [ \t-\r].
  • \S – соответствует любому непробельному символу. Эквивалент [^ \t-\r].
  • \w – соответствует любому «словообразующему» символу, то есть букве, цифре или нижнему подчеркиванию (только ASCII). Эквивалент [A-Za-z0-9_].
  • \W – соответствует любому символу, не являющемуся «словообразующим» (только ASCII). Эквивалент [^A-Za-z0-9_].
  • \ – символ экранирования. Любой символ, идущий за \, будет воспринят буквально (за исключением перечисленных ниже). Благодаря этому символы, описанные выше, можно будет использовать для сравнения. Например, \* будет эквивалентом буквальному * (то есть * не будет восприниматься как оператор). К управляющим символам \r, \n и так далее не применяется никакого особого подхода, поэтому они будут эквивалентами r, n и т.д. По этой причине в регулярных выражениях не рекомендуется использовать неформатированные Python-строки (r""). Например, если задать в регулярном выражении r"\r\n", это будет эквивалентом "rn". Поэтому, если вам нужно задать в регулярном выражении символ возврата каретки (CR), за которым идет символ перевода строки (LF), используйте "\r\n".

НЕ ПОДДЕРЖИВАЮТСЯ:

  • {m,n} – количество повторений от m до n
  • (?P<название>...) – именованные группы
  • (?:...) – группы без захвата
  • \b, \B – продвинутые специальные наборы символов
  • экранирование специальных символов вроде \r, \n и так далее – используйте для этого Python’овское экранирование
  • и т.д.

Пример:

import ure

# Поскольку в модуле «ure» не поддерживается 
# экранирование управляющих символов, 
# строки r"" использовать не рекомендуется:
regex = ure.compile("[\r\n]")

regex.split("line1\rline2\nline3\r\n")

# Результат:
# ['line1', 'line2', 'line3', '', '']

Функции

  • ure.compile(regex_str[, flags]) – компилирует регулярное выражение, возвращает объект regex.
  • ure.match(regex_str, string) – компилирует регулярное выражение regex_str и сопоставляет его со строкой string. Сопоставление всегда выполняется в начале строки.
  • ure.search(regex_str, string) – компилирует regex_str и ищет его в строке string. В отличие от match(), эта функция ищет заданный шаблон не только в начале строки, а по всей строке, и возвращает самое первое обнаруженное совпадение. Впрочем, если регулярное выражение привязано к началу строки, найденное совпадение все равно может находиться на 0-ой позиции.
  • ure.sub(regex_str, replace, string, count=0, flags=0, /) – компилирует regex_str и ищет его в строке string , заменяя все совпадения на replace и возвращая новую строку.

Значение в аргументе replace может быть строкой или функцией. Если это строка, то в ней можно воспользоваться экранированными последовательностями вроде \<number> и \g<number>, чтобы вставить в строку содержимое группы (если совпадений по группам не будет, в эти места будут вставлены пустые строки). Если это функция, то у нее должен быть только один аргумент (объект match), а ее возвращаемым значением должна быть строка, которой будут заменяться найденные совпадения. В аргументе count должно быть ненулевое значение, и в нем задается то, сколько раз нужно выполнить замену. Аргумент flags игнорируется. Доступность: Эта функция есть не во всех MicroPython-портах.

  • ure.DEBUG – флаговое значение. Показывает отладочную информацию о скомпилированном выражении.

Доступность: Эта функция есть не во всех MicroPython-портах.

Объекты «regex»

Скомпилированное регулярное выражение. Экземпляры этого класса создаются при помощи ure.compile().

  • regex.match(string) – работает аналогично функции ure.match().
  • regex.search(string) – работает аналогично функции ure.search().
  • regex.sub(replace, string, count=0, flags=0, /) – работает аналогично функции ure.sub().

Для повышения эффективности при работе с методами regex.match(string), regex.search(string) и regex.sub(), используйте для разных строк один и тот же объект regex.

  • regex.split(string, max_split=-1, /) – разбивает строку при помощи regex. В аргументе max_split задается максимальное количество разбиений. Возвращает список строк (количество возвращаемых элементов может быть max_split+1).

Объекты «match»

Объекты match возвращаются методами match() и search() и передаются функции replace в методе sub().

  • match.group(index) – возвращает совпавшие подстроки. Если задать в аргументе index значение «0», это вернет весь match целиком, а если «1» и больше, это вернет совпадение, соответствующее номеру заданной группы. Поддерживаются только числовые группы.
  • match.groups() – возвращает кортеж, содержащий все подстроки-группы объекта match.

Доступность: Эта функция есть не во всех MicroPython-портах.

  • match.start([index]) – возвращает индекс исходной строки, где находится начало заданной подстроки-группы index. По умолчанию обрабатывается весь match целиком, или же в group можно задать номер группы и таким образом выбрать именно ее.
  • match.end([index]) – возвращает индекс исходной строки, где находится конец заданной подстроки-группы index. По умолчанию обрабатывается весь match целиком, или же в index можно задать номер группы и таким образом выбрать именно ее.

Доступность: Функции match.start() и match.end() есть не во всех MicroPython-портах.

  • match.span([index]) – возвращает кортеж с 2 элементами (match.start(index), match.end(index)).

Доступность: Эта функция есть не во всех MicroPython-портах.



См.также

Внешние ссылки