Пайтон не видит в регулярке симовол " ' "

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 не регулярные

→ Ссылка