2010-05-31 68 views
0

我有一个正则表达式,links = re.compile('<a(.+?)href=(?:"|\')?((?:https?://|/)[^\'"]+)(?:"|\')?(.*?)>(.+?)</a>',re.I).findall(data)优化蟒蛇链接匹配的正则表达式

找到一些HTML链接,它走的是一条很长一段时间对某些HTML,任何优化建议吗?

之一,它扼流圈是http://freeyourmindonline.net/Blog/

+2

请尽量避免使用正则表达式解析HTML。 – 2010-05-31 18:40:49

+1

强制性链接:http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – 2010-05-31 18:47:31

回答

2

有没有使用HTML解析器的原因吗?使用像BeautifulSoup这样的东西,你可以得到所有的链接,而不用像这样的丑陋的正则表达式。

+0

是否有可能获得正则表达式的所有数据获得?链接,锚文本和a和href之间的位以及href之后直到标签的结尾? – Matt 2010-05-31 18:47:08

+0

@Matt:我发现很难理解你的正则表达式在做什么,但是HTML解析器的总体思想是它们可以很容易地解析HTML。我确信,一旦你阅读了文档,你试图做的非常简单。 – 2010-05-31 18:56:06

+1

是的,非常非常。这似乎是你的问题的副本,并且回答如下:http://stackoverflow.com/questions/1080411/retrieve-links-from-web-page-using-python-and-beautiful-soup – Daenyth 2010-05-31 18:58:02

0

如何更直接地处理href的?

re_href = re.compile(r"""<\s*a(?:[^>]+?)href=("[^"]*(\\"[^"]*)*"|'[^']*(\\'[^']*)*'|[^\s>]*)[^>]*>""", re.I) 

这需要大约0.007秒comparsion你findall这需要我的电脑上38.694秒。