urlopen('http://www.pythonscraping.com/pages/page1.html')
2. Добавить ровно пять букв b.
3. Добавить произвольное четное число букв c.
4. В конце поставить букву d или e.
Этим правилам соответствуют строки aaaabbbbbccccd, aabbbbbcce и т.д. (количество вариантов бесконечно).
Регулярные выражения — всего лишь краткий способ представления этих наборов правил. Например, регулярное выражение для описанного выше набора правил выглядит так:
aa*bbbbb(cc)*(d|e)
На первый взгляд эта строка смотрится жутковато, но она станет понятнее, если разбить ее на составляющие:
•aa* — буква a, после которой стоит символ * (звездочка), означает «любое количество букв a, включая 0». Такая запись гарантирует, что буква a будет написана хотя бы один раз;
• bbbbb — ничего особенного, просто пять букв b подряд;
• (cc)* — любое количество чего угодно можно заключить в скобки. Поэтому для реализации правила о четном количестве букв c мы можем написать две буквы c, заключить их в скобки и поставить после них звездочку. Это значит, что в строке может присутствовать любое количество пар, состоящих из букв c (обратите внимание, что это также может означать 0 пар);
• (d|e) — вертикальная линия между двумя выражениями означает «то или это». В данном случае мы говорим «добавить d или e». Таким образом мы гарантируем, что в строку добавится ровно один из этих двух символов.
Всякий раз, обращаясь к тегу в объекте BeautifulSoup, разумно добавить проверку того, существует ли этот тег. При попытке доступа к несуществующему тегу BeautifulSoup возвращает объект None.