Оригинал: 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
, так как некоторые требования парсинга требуют его использования.
re
библиотеки.*
, то вы можете использовать \*
для его экранирования. Большинство других символов имеют аналогичные варианты.re.ASCII
, так как некоторые требования парсинга требуют его использования.regex
, если вам требуется поддержка Юникода — она будет лучше.Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )