以下正则表达式用于从页面中提取URL链接:
LINK_REGEX = re.compile("<a [^>]*href=['\"]([^'\"]+)['\"][^>]*>")
问题1 &GT;如何表示以下字符串?我在目的上与'和'不匹配
<a href="http://www.yahoo.com'>
我已经尝试过以下陈述,但没有一个适合我。
>>> page = '<a href="http://www.yahoo.com\'>'
>>> page
'<a href="http://www.yahoo.com\'>'
>>> page = '<a href="http://www.yahoo.com''>'
>>> page
'<a href="http://www.yahoo.com>'
问题2 &GT;根据我的理解,按照设计,LINK_REGEX将匹配上述链接,尽管这是不可取的。那么如何修改正则表达式以便强制匹配'with'或“with”。
答案 0 :(得分:1)
对于问题1,您的第一种方法有效。
>>> page = '<a href="http://www.yahoo.com\'>'
>>> len(page)
31
>>> page
'<a href="http://www.yahoo.com\'>'
>>> page[-1]
'>'
>>> page[-2]
"'"
>>> page[-3]
'm'
答案 1 :(得分:1)
(如果我有这个特权,我会把它发表评论。)
如果您正在尝试解析HTML,强烈建议您不要使用正则表达式。如果您使用像BeautifulSoup或lxml.html这样的HTML解析模块,那么您将节省很多麻烦和问题。
其次,几乎每次使用正则表达式时,请确保将r
添加到字符串中,如下所示:
LINK_REGEX = re.compile(r"<a [^>]*href=['\"]([^'\"]+)['\"][^>]*>")
这将确保正确转义。
如果你肯定需要使用正则表达式,“9000”的答案对你有用。
答案 2 :(得分:0)
['"]
将匹配'
或"
。
(['"]).+\1
会将带引号的字符串与匹配引号匹配。 parens(匹配组)中的表达式将匹配单引号或双引号,\1
将匹配第一个匹配组匹配的内容(这称为'反引用')。
注意,引号不在表达式中以任何方式进行转义,以使其更具可读性。你的正则表达式字符串可能需要至少转义一种引号。
答案 3 :(得分:0)
使用两个正则表达式:
<a\s*[^>]*href="([^"]+)"[^>]*> # double quoted strings
<a\s*[^>]*href='([^']+)'[^>]*> # single quoted strings
href
的内容将出现在第二组中。