training-web.ruГлавнаяКатегорииО насКарта сайтаПоискТёмная тема

Категории

Поиск значений регулярные выражения Python

Создано: 11 декабря 2017Автор: Егор Астапов5036 просмотровСложность: легкий

Дошли руки до регулярных выражений Python. Эта тема сложная и рано или поздно вы с ней столкнётесь. Я покажу вам как распарсить 2 урла. Задача простая - вытащить все значения из урлов. В первом примере мы будем искать сразу 2 переменные: cat, page. Нам поможет питоновская функция findall. Она позволяет искать массу значений, а не одно как match и search. В функции re.findall() необходимо передать данные для 2 входных параметров: само регулярное выражение, строку для поиска. Обратите внимание на экранирование \?. Символ ? в регулярных выражениях означает может быть элемент или группа элементов. Его необходимо экранировать для того чтобы он воспринимался как символ строки, а не часть регулярного выражения. ^ - применяется для того чтобы искать совпадение с самого начала строки. Если первый символ строки пробел, то регулярное выражение не сработает. Символ $ означает конец строки. Круглые скобки () играют большое значение. Благодаря им вы забираете данные из строки. Без скобочек ничего не получится.


#!/usr/bin/python3

import re

url_cat='http://egorch.ru/view_cat.php?cat=2&page=4'

match = re.findall(r"^http://egorch.ru/view_cat.php\?cat=(\d+)&page=(\d+)$", url_cat)
print(type(match))
'''
вывод:
<class 'list'>
'''
print(type(match[0]))
'''
вывод:
<class 'tuple'>
'''
print(match[0])
'''
вывод:
('2', '4')
'''

cat, page = match[0];
print('cat:', cat, 'page:', page)
'''
вывод:
cat: 2 page: 4
'''

Во втором примере мы попытаемся найти урл при помощи регулярных выражений Python и ip страницы. Для поиска одного урла используем search. Если функция search находит совпадение, то останавливается. Если вам нужно найти несколько совпадений в строке, то используйте findall. Обратите внимание на круглые скобки внутри регулярного выражения. Благодаря им вы вы схватите весь урл.


url_page='текст1 http://egorch.ru/view_post.php?id=9 текст2'
url = re.search(r'(http://egorch.ru/view_post.php\?id=\d)', url_page)
#вывод найденного урл
print('url:', url.group())
'''
вывод:
url: http://egorch.ru/view_post.php?id=9
'''

Теперь необходимо найти id страницы. Нам снова поможет функция findall. Благодаря круглым скобочкам (\d+) берём id страницы.


url_page='http://egorch.ru/view_post.php?id=9'
id_page = re.findall(r'^http://egorch.ru/view_post.php\?id=(\d+)$', url_page)
# получаем первый элемент списка
id_page = id_page[0]
print('id_page:', id_page)
'''
вывод:
id_page: 9
'''

Функции регулярных выражений

  1. compile - метод для создания объект шаблона
  2. match - метод ищет совпадение по заданному шаблону. Поиск ведётся с начала строки
  3. search - возвращает одну найденную строку
  4. findall - метод возвращает список всех найденных совпадений
  5. sub - метод ищет шаблон в строке и заменяет его на указанную подстроку. Идеально подходит для замены неприличных слов в сообщений.
  6. group - метод выводит результат
  7. start - номер начальной позиции поиска
  8. end - номер последней позиции поиска

Шпаргалка по символам для шаблона.

СимволОписание
.Один любой символ, кроме новой строки \n.
?0 или 1 вхождение шаблона слева
+1 и более вхождений шаблона слева
*0 и более вхождений шаблона слева
\wЛюбая цифра или буква (\W — все, кроме буквы или цифры)
\dЛюбая цифра [0-9] (\D — все, кроме цифры)
\sЛюбой пробельный символ (\S — любой непробельный символ)
\bГраница слова
[..]Один из символов в скобках ([^..] — любой символ, кроме тех, что в скобках)
\Экранирование специальных символов (\. означает точку или \+ — знак «плюс»)
^ и $Начало и конец строки соответственно
{n,m}От n до m вхождений ({,m} — от 0 до m)
a|bСоответствует a или b
()Группирует выражение и возвращает найденный текст
\t, \n, \rСимвол табуляции, новой строки и возврата каретки соответственно

Если вы хотите проверять e-mail адреса при помощи регулярных выражений, то посмотрите статью Как проверить email-адрес регулярные выражения Python. Я подробно описываю как проверять email. Вы увидите пример поиска email в строке.

Если вы планируете как я освоить фреймворк django, то изучайте регулярные выражения. В django часто парсятся урлы. Научитесь писать короткие регулярные выражения. Чем короче выражение, тем быстрее оно работает. Громоздкие регулярные выражения будут замедлять работу скриптов.

Комментарии

Анвар: 17 февраля 2019 20:15:08
По кайфу брат:)

реклама