Дошли руки до регулярных выражений 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
'''
Символ | Описание |
---|---|
. | Один любой символ, кроме новой строки \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 часто парсятся урлы. Научитесь писать короткие регулярные выражения. Чем короче выражение, тем быстрее оно работает. Громоздкие регулярные выражения будут замедлять работу скриптов.