Python регулярные выражения квадратные скобки

Регулярные выражения: основы составления правил

Продолжим говорить о регулярных выражениях в Python в рамках NLP. Регулярные выражения нужны для поиска подстрок, которые удовлетворяют правилам. Например, нужно найти все слова, которые начинаются с заглавной буквы «А», или все даты в предложении, которое содержит и другие виды чисел. Сегодня мы расскажем об основных символах, которые образуют регулярные выражения: замена, группировка, перечисление символов, а также специальные символы в Python.

Один любой символ или повторять до бесконечности

Когда появляется ситуация, когда мы не знаем какой именно символ используется, то используется точка . . А когда нужно повторить какой символ сколько-то раз, то используется звездочка * (0 или n символов) или плюс + (1 или n символов). Рассмотрите примеры регулярных выражений в Python:

# aa.bb. # Может значить aapbby или aa4bb$ # a.b* # Может значить acbbb или aqb или a,bbbbbb >>> import re >>> re.search(‘aa.bb.’, ‘aapbby’) >>> re.search(‘a.b*’, ‘a,bbbbbb’)

Точка и звездочка могут использоваться вместе .* , тогда это значит любой символ повторяется сколько-то раз. Это удобно, когда вы не помните все выражение, но знаете каким символом он заканчивается. Ниже пример того, как применять такое регулярное выражение в Python.

Но стоит быть очень осторожным с ним, поскольку это регулярное выражение будет смотреть совпадения до конца строки. А это бывает не то, что нужно:

Группа символов

Символы могут быть сгруппированы с помощью круглых скобок. К этим группам могут быть применены повторения * или + . Кроме того внутри скобок может использоваться оператор ИЛИ в виде | . Следующие примеры показывают разные регулярные выражения в Python с применением группировок:

Читайте также:  Html body background color names

# (ac)* # соответсвует acacac или acac # Знак | соответсвует ИЛИ: >>> re.search(‘d(e|i)n’, ‘den’) >>> re.search(‘d(e|i)n’, ‘din’)

Перечисление символов

Как мы увидели, использовать .* опасно. Поэтому лучше всего перечислять всевозможные символы внутри квадратных скобок [] . Например, не известно какой знак препинания следует дальше, тогда в Python можно регулярное выражение вывести следующим образом:

>>> pattern = 'a[,u]bc' >>> re.search(pattern, 'a,bc') >>> re.search(pattern, 'aubc') >>> re.search(pattern, 'adbc') # Ничего не нашел

Последний пример не соответствует правилу, потому что символ ‘d’ не указан в [] . Также в квадратных скобках можно указывать диапазоны букв и цифры. Например, [a-z] означает все строчные буквы английского алфавита, [A-Z] — все прописные, а 8 — все цифры. Ниже приведены примеры регулярных выражения с применением диапазонов на Python.

>>> re.search(‘[a-z0-5]+’, ‘asaBR’) >>> re.search(‘[a-z0-5]+’, ‘B612’)

Также если внутри квадратных скобок указан символ ^ , то это значит «всё, что НЕ совпадает». Например, [^0-9] — любой символ не цифра. Диапазоны кириллических символов задаются в виде [А-Яа-я] .

Обратный слэш для пропуска символов

Как в квадратных скобках для регулярного выражения указать знак препинания точку? Ведь точка является специальным правилом, которое обозначает «любой символ». Для таких случаев используется обратный слэш \ . При использовании перед специальными символами Python интерпретирует их как обычные символы. Поэтому чтобы пропустить также сами квадратные скобки, то и перед ними тоже нужно его поставить. Ниже показаны примеры регулярных выражения с использованием обратного слэша на Python.

>>> pattern = ‘a[,\.\]]bc’ # Это , или . или ] >>> re.search(pattern, r’a]bc’) >>> re.search(pattern, r’a.bc’)

В строке обратный слэш тоже имеет особое значение. Он ответственен за специальные символы: \n (новая строка), \ t (отступ), \s (пробел) и т.д. Их так же можно перечислять в квадратных скобках. А вот для пропуска самого обратного слэша в Python, требуется повторить его 4 раза. Ведь два слэша значат слэш как обычный символ, а чтобы пропустить его нужно два обычных. Иными словами, это:

regex("\\" [пропущенный слэш] пропускает "\\" [пропущенный слэш])

В Python строку можно инициализировать как raw (сырую), т.е. в ней обратный слэш будет считаться как обычный символ. Для этого перед строкой указывается r . Взгляните как прописываются пути Windows в Python в виде обычной и сырой строки:

>>> 'C:\User\admin\python' File "", line 1 'C:\User\admin\python' SyntaxError: (unicode error) 'unicodeescape' codec can t decode bytes in position 2-3: truncated \UXXXXXXXX escape SyntaxError: invalid syntax # Ошибка, потому что Python не понимает \U # Чтобы прописать путь, используется \\ или r: >>> path = 'C:\\User\\admin\\python' >>> raw_path = r'C:\\User\\admin\\python'

Цифры, пробелы, отступы

Использование обратного слэша вместе с некоторыми символами даст новое значение строке. Так, \n — новая строка, \t — отступ . Есть ещё полезные специальные символы:

  • \d — любая цифра, эквивалентно использованию 6
  • \D — любая не цифра, эквивалентно использованию [^0-9]
  • \s — пробел
  • \s — не пробел
  • \w — любой цифробуквенный символ, эквивалентно использованию [a-zA-Z0-9_]
  • \W — любой не цифробуквенный символ, эквивалентно использованию [^a-zA-Z0-9_]

>>> re.search(‘\d\d\d\d-\d\d-\d\d’, ‘2020-05-10’)

Этот пример на Python показывает, как можно найти даты в предложении с применением специальных символов. Ниже таблица, в который приведены символы для регулярных выражений.

Символ Значение Пример Совпадения
. Любой одиночный символ (включая числа, пробелы и т. д.). f.t fat, fit, fet
* Повторение 0 или более раз a*b* aabbb, bbb, ab, aaa
+ Повторение 1 или более раз a+b+ aabbb, ab, aaabbb
[] Выбор любого символа в скобках [a-z]* apes, banana, flu
[^] Любой символ, которого нет в скобках [^a-z]* APES,FLU, BANANA
() Группа символов (a*b)* aaabaab, abaaab, bab
| Оператор ИЛИ внутри группы символов b(a|i|e)d bad, bid, bed
\ Знак пропуска \.\|\\ .|\
Повторение указанного количества раз от m до n (включительно) ab aabbb, aaabbb,aabb
^ Указывает, что символ или часть выражения находится в начале строки ^a apple, asdf, a
$ Сканировать до конца строки [A-Z]*[a-z]*$ ABCabc, zzzyx, Bob

О том, как применять регулярные выражения в Python для решения реальных Data Science задач, вы узнаете на нашем специализированном курсе «PNLP: NLP – обработка естественного языка с Python» в лицензированном учебном центре обучения и повышения квалификации Data Scientist’ов и IT-специалистов в Москве.

Источник

Оцените статью