为什么我的Python正则表达式不从链接中提取相对URL?

时间:2012-02-29 13:53:11

标签: python html regex html-parsing

我有,在Python中:

links = re.match(r'''<A HREF="(\w+?\.htm)#\w*?">''', workbench)

'workbench'是一个读入内存的文件,行分隔符替换为空格;一个这样的文件位于:http://pastebin.com/a0LHKXcS

有些链接对我不感兴趣;他们都有小写'a'或'href'。到目前为止我可以构造,当与pastebin中的文件匹配时,我应该得到很多匹配。但到目前为止,re.match()返回None,而不是填充的MatchObject,我可以提取数据。我尝试使用命令行并将正则表达式向下剪切以更加容忍差异,并且搜索HREF时没有找到任何内容。

如何调整正则表达式(或其他因素)以使调用获得填充的MatchObject?

由于

2 个答案:

答案 0 :(得分:6)

re.match仅尝试匹配字符串的。请改用re.search

除此之外,lazyr是对的:尽管这个特定的正则表达式在这个特定的实例中可以找到特定的命中,但是依靠HTML解析器(例如BeautifulSoup),你通常要好得多。

答案 1 :(得分:1)

使用BeautifulSoup

>>> import BeautifulSoup
>>> import re
>>> aa = soup.findAll("a", href=re.compile(r".*#.*"))
>>> for a in aa:
...   print a["href"]
... 
npnf214.htm#P5_18
npnf2140.htm#P6_28
npnf2141.htm#P30_306
npnf2142.htm#P257_10476
npnf2143.htm#P273_20869
npnf2144.htm#P322_41638
npnf2145.htm#P424_60362
npnf2146.htm#P453_82389
npnf2147.htm#P506_110748
npnf2148.htm#P514_110857
npnf2149.htm#P522_112870
npnf2110.htm#P538_115696
npnf2111.htm#P553_120011
npnf2112.htm#P561_131414
npnf2113.htm#P593_136014
npnf2114.htm#P681_155628
npnf2115.htm#P719_167167
npnf2116.htm#P743_173304
npnf2117.htm#P768_186497
npnf2118.htm#P839_201234
npnf2119.htm#P891_222702
npnf2120.htm#P941_235400
npnf2121.htm#P993_248248
npnf2122.htm#P1057_267070
npnf2123.htm#P1085_275404
npnf2124.htm#P1111_287892
npnf2125.htm#P1370_306192
>>>