如何在正则表达式中匹配'或'与'或'

时间:2012-01-13 21:59:19

标签: python regex

以下正则表达式用于从页面中提取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”。

4 个答案:

答案 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的内容将出现在第二组中。