如何在Python中修复“ re.error:位置处未终止的字符集”?

时间:2019-06-22 23:53:17

标签: python regex python-3.x python-requests

我目前正在编写一个脚本,以从“ 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)

,当我输入页面(例如this页面)时,出现此错误:

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 个答案:

答案 0 :(得分:1)

在兼容ECMAScript的正则表达式中(该正则表达式可能是为该正则表达式引擎编写的),[^]用于匹配任何字符,它是一个有效的字符类,它与“任何东西都匹配”匹配,因此匹配一切。

您应在此处使用[\s\S]*?而不是[^]+来匹配任何0个以上的字符,并尽可能少地匹配。