1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/wizardforcel-lmpythw-zh

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
ex31.md 8.1 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 06.03.2025 03:52 f9ec0dd

Упражнение 31: регулярные выражения

Оригинал: Exercise 31: Regular Expressions

Переводчик: 飞龙

Лицензия: CC BY-NC-SA 4.0

Гордо использует Google Translate

Регулярные выражения (RegEx) — это компактный способ указывать, как последовательность символов должна совпадать в строке. Обычно их считают "ужасными", но, как вы знаете, всё, что вызывает страх, обычно не так страшно. Дело в том, что регулярные выражения представляют собой набор примерно из восьми символов, который сообщает компьютеру, как совмещать шаблоны. Проще говоря, они легко понять. Проблемы возникают тогда, когда люди пытаются использовать невероятно сложные регулярные выражения, где парсер действительно будет лучше. Как только вы поймёте эти восемь символов и ограничения регулярных выражений, вы увидите, что они совсем не страшны.

Я хочу, чтобы вы запомнили больше информации, чтобы подготовить ваш мозг к обсуждению.

^

Закрепляет начало строки. Совпадает только если строка начинается именно с этого места.

$

Закрепляет конец строки. Совпадает только если строка заканчивается именно здесь.

.

Любой одиночный символ. Принимает любой одиночный символ.

?

Делает предыдущий элемент необязательным. Так что A? означает, что символ A является необязательным.> *

Принимает ноль или более повторений предыдущего элемента. Выбирает предыдущую часть регулярного выражения и принимает её ноль или более раз. A* примет "AAAAAAAA" или "BQEFT", поскольку там нет ни одного A.

+

Принимает один или более повторений предыдущего элемента. Подобно *, но принимает только одно или более таких символов. A+ совпадёт с "AAAAAAAA", но не с "BQEFT".

[X-Y]

Область символов от X до Y, принимает любую строку, указанную в этой области. [A-Z] означает все заглавные английские буквы. Многие распространённые области символов имеют \ быстрый доступ, который можно использовать вместо них.

()

Захватывает эту часть регулярного выражения для использования позднее. Многие библиотеки регулярных выражений используют его для замены, извлечения или модификации текста. Захват выбирает часть внутри () и сохраняет её для дальнейшего использования. Большинство библиотек позволяют вам ссылаться на эти захваты позже. Если вы используете ([A-Z]+), он захватит один или более заглавных английских слов. Python's re 库 列出了更多符号,但大多数都是这八个符号的一些变种,或者是在正则表达式库中不太常见的附加功能。你会很快记住这八个符号以开始学习,重点关注加粗的部分(锚定结尾,前面部分可选),这样你就可以快速回忆起它们并理解其作用。

学完这些符号之后,请查看下面的正则表达式并将它们翻译成中文,并使用Python re库对所列字符串进行测试,或者你可以想到的任何其他字符串。> ".*BC?$"

helloBC, helloB, helloA, helloBCX

"'[A-Za-z][0-9]+'"

A1232344, abc1234, 12345, b493034

"'^[0-9]?a*b?.?$'"

0aaaax, aaab9, 9x, 88aabb, 9zzzz

"A+B+C+\[xyz\]\*"

AAAABBCCCCCCxyxyz, ABBBBCCCxxxx, ABABABxxxx

После того как вы перевели их, используйте модуль re в Python, чтобы попробовать их в командной строке следующим образом:

>>> import re
>>> m = re.match(r".*BC?$", "helloB").span()
>>> re.match(r".*BC?$", "helloB").span()
(0, 6)
>>> re.match(r"[A-Za-z][0-9]+", "A1232344").span()
(0, 8)
>>> re.match(r"[A-Za-z][0-9]+", "abc1234").span()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'span'
>>> re.match(r"[A-Za-z][0-9]+", "1234").span()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'span'
>>> re.match(r"[A-Za-z][0-9]+", "b493034").span()
(0, 7)
>>>

Для всех неподходящих случаев вы получите ошибку AttributeError: 'NoneType', поскольку функция re.match возвращает None, когда регулярное выражение не соответствует.

Часто задаваемые вопросы

Вызовите этот вызов

Чтение данного материала поможет вам быстро запомнить эти восемь символов, а также позволит использовать их в ваших проектах.

Расширенное обучение

Расширьте свою память, чтобы она включала все возможные символы в документации Python re библиотеки. Если вы хотите получить совпадение с символом *, то вы можете использовать \* для его экранирования. Большинство других символов имеют аналогичные варианты.

Убедитесь, что вы знаете, как использовать re.ASCII, так как некоторые требования парсинга требуют его использования.


Исследовательское обучение+ Расширяйте свою память, чтобы она включала все возможные символы в документации Python re библиотеки.

  • Если вы хотите совпадение с символом *, то вы можете использовать \* для его экранирования. Большинство других символов имеют аналогичные варианты.
  • Убедитесь, что вы знаете, как использовать re.ASCII, так как некоторые требования парсинга требуют его использования.

Подробное изучениеПосмотрите на библиотеку regex, если вам требуется поддержка Юникода — она будет лучше.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/wizardforcel-lmpythw-zh.git
git@api.gitlife.ru:oschina-mirror/wizardforcel-lmpythw-zh.git
oschina-mirror
wizardforcel-lmpythw-zh
wizardforcel-lmpythw-zh
master