Пайтон не видит в регулярке симовол " ' "
name_films = re.findall(r"<a class=\"films_name ref\" href=\"\/movies\/[\d]+\/\">([**'**a-zA-Zа-яёА-ЯЁ «»\"+\d№=.\(\)\-+,?!^:;]+)<\/a>",self.req.text)
Нужно взять Д'Артаньян и три мушкетёра
<a class="films_name ref" href="/movies/7731575/">Д'Артаньян и три мушкетёра</a>
Я не понимаю почему. Подскажите пж( В regex101 берет, а в проге нет
Ответы (1 шт):
Автор решения: gil9red
→ Ссылка
У меня ваш код работает без ошибок.
Кроме того, регулярку можно немного упростить:
import re
text = """
<a class="films_name ref" href="/movies/7731575/">Д'Артаньян и три мушкетёра</a>
<a class="films_name ref" href="/movies/7731575/">Д'Артаньян и три мушкетёра</a>
"""
name_films = re.findall("""<a class="films_name ref" href="/movies/\d+/">(.+?)</a>""", text)
print(name_films)
# ["Д'Артаньян и три мушкетёра", "Д'Артаньян и три мушкетёра"]
Но я бы рекомендовал парсить парсерами:
from bs4 import BeautifulSoup
root = BeautifulSoup(text, 'html.parser')
print([a.text for a in root.select('.films_name')])
# ["Д'Артаньян и три мушкетёра", "Д'Артаньян и три мушкетёра"]
Объясняю на примере, в той html могут вместо кавычек использоваться одинарные, атрибуты могут поменяться местами, добавиться новые атрибуты или новые значения в атрибуты, например в class:
text = """
<a class="films_name ref" href="/movies/7731575/">Д'Артаньян и три мушкетёра</a>
<a href='/movies/7731575/' class='ref films_name favorite' style="">Д'Артаньян и три мушкетёра</a>
"""
Парсер отработает также, а регулярка уже нет. Т.к. она ожидает регулярные выражения, а html/xml не регулярные