Как исправить «re.error: неопределенный набор символов в позиции» в Python? - PullRequest
1 голос
/ 23 июня 2019

В настоящее время я программирую скрипт для получения текстов песен с сайта " www.lyrics.com ".У меня есть это:

import os, string, re, requests

print("Enter lyrics.com site:")
url = input()

lyrics_raw_html = requests.get(url + '.html')
lyrics_raw = re.findall(r'<pre id=\"lyric-body-text\" class=\"lyric-body wselect-cnt\" dir=\"ltr\" data-lang=\"en\">([^]+)<\/pre>', lyrics_raw_html.text)
lyrics = re.sub(r'(<.+>)', '', lyrics_raw[0])

print(lyrics)

, и когда я ввожу страницу (например, эту страницу), я получаю эту ошибку:

File "C:\Users\MYNAMEHERE\AppData\Local\Programs\Python\Python37-32\lib\sre_parse.py", line 532, in _parse
source.tell() - here)
re.error: unterminated character set at position 91

Кажется, что измое регулярное выражение, но после некоторой обработки я понятия не имею, в чем проблема.Любая помощь была бы хороша!

Заранее спасибо.

1 Ответ

1 голос
/ 23 июня 2019

В регулярном выражении, совместимом с ECMAScript (регулярное выражение, вероятно, было написано для этого движка регулярных выражений), [^] используется для сопоставления с любым символом, это допустимый класс символов, который соответствует «чему угодно, но ничего» и, следовательно, соответствует всему.

Вы должны использовать [\s\S]*? здесь вместо [^]+, чтобы соответствовать любым 0+ символам, как можно меньше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...