MicroPython:Библиотеки/ure: различия между версиями
Myagkij (обсуждение | вклад) Нет описания правки |
Нет описания правки |
||
Строка 41: | Строка 41: | ||
Пример: | Пример: | ||
<syntaxhighlight lang="python | <syntaxhighlight lang="python"> | ||
import ure | import ure | ||
Текущая версия от 18:17, 14 мая 2023
Модуль 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-портах.