[英]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.