繁体   English   中英

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

[英]How to match the ' or “ with ' or ” in regular expression

以下正则表达式用于从页面中提取URL链接:

LINK_REGEX = re.compile("<a [^>]*href=['\"]([^'\"]+)['\"][^>]*>")

问题1 >如何表示以下字符串? 我故意错配'和'

<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 >根据我的理解,按照设计,LINK_REGEX将匹配上述链接,尽管这是不可取的。 那么如何修改正则表达式以便强制匹配'with'或“with”。

对于问题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'

(如果我有这个特权,我会把它发表评论。)

如果您正在尝试解析HTML,强烈建议您不要使用正则表达式。 如果您使用像BeautifulSoup或lxml.html这样的HTML解析模块,那么您将节省很多麻烦和问题。

其次,几乎每次使用正则表达式时,请务必将r到字符串中,如下所示:

LINK_REGEX = re.compile(r"<a [^>]*href=['\\"]([^'\\"]+)['\\"][^>]*>")

这将确保事情正确转义。

如果您肯定需要使用正则表达式,“9000”的答案将适合您。

['"]将匹配'"

(['"]).+\\1将匹配带引号引号的带引号的字符串.parens(匹配组)中的表达式将匹配单引号或双引号, \\1将匹配第一个匹配组匹配的任何内容(这是称为“反向引用”)。

请注意 ,引号不会以任何方式在表达式中进行转义,以使它们更具可读性。 您的正则表达式字符串可能需要至少转义一种引号。

使用两个正则表达式:

<a\s*[^>]*href="([^"]+)"[^>]*>  # double quoted strings
<a\s*[^>]*href='([^']+)'[^>]*>  # single quoted strings

然后href的内容将在第二组中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM