Python:如何使用re忽略括号中的链接?

Python:如何使用re忽略括号中的链接?,python,regex,Python,Regex,守则的有关部分如下: import re reargs = '<a\s*href=[\'|"](.*?)[\'"].*?>' link = re.search(reargs,content,flags=re.IGNORECASE) 重新导入 如果可以有多组嵌套括号,如“((foo)link)”,我认为正则表达式不可能做到这一点。特别要注意的是,可以在URL(如at)中使用括号,因此即使文本本身不包含任何参数,也可能存在嵌套的参数。所以,在一般情况下,我认为这不能用正则表达式来实现

守则的有关部分如下:

import re
reargs = '<a\s*href=[\'|"](.*?)[\'"].*?>'
link = re.search(reargs,content,flags=re.IGNORECASE)
重新导入

如果可以有多组嵌套括号,如“((foo)link)”,我认为正则表达式不可能做到这一点。特别要注意的是,可以在URL(如at)中使用括号,因此即使文本本身不包含任何参数,也可能存在嵌套的参数。所以,在一般情况下,我认为这不能用正则表达式来实现

为了解决这个问题,我假设您最多可以有1级深的括号,并且没有URL包含括号

您要查找的正则表达式如下所示:

(\([^\)]*\)|[^\(<])*_link_

(\([^\)]*\)\[^\(一般来说,用正则表达式解析HTML是个坏主意。但是因为你问了这个问题,而且这个问题也有价值(如何忽略匹配项被括号包围的情况),我会告诉你我的想法

现在,因为我不知道你的页面看起来是什么样子,我只想说,一般来说,你可以通过添加
[^x]
来排除匹配项,除非
x
是你不想要的字符。括号使之匹配任何内容,
^
排除后面的内容

因此,您可以通过使用
[^(]
foo
[^)]
环绕匹配字符串来排除圆括号。如果圆括号之间有其他字符,则必须单独说明。

使用圆括号,您可以执行以下操作:

import lxml.html
import re

tree = lxml.html.parse("http://pastehtml.com/view/b7604in99.html")
links = tree.xpath("//a")

for link in links:
    if re.match(r'^\(.*\)$', link.text.strip()):
        print link.get('href')

不要使用正则表达式来解析HTML。请使用(X)HTML Parser.BeautifulSoup出现在脑海中。添加一个更详细的提示,虽然现代正则表达式可以像您要求的那样执行操作,但这通常不是最好的主意。您应该使用一些不同技术的一个好提示是,您正在尝试匹配平衡括号,并且有可能使用ne被拍卖的物品。