为什么老是匹配不到?

为什么老是匹配不到?

正在打算改进百度mp3的下载程序,但找到某个歌曲的列表的时候进行连接匹配,

[Copy to clipboard] [ - ]
CODE:
link_a_re=re.compile('<a [^>]*>.*</a>$').search(j)

总是匹配不到!

在python的提示符下面测试可以通过,用vim测试也能找到,可从网上抓下来的html怎么就不行呢?

怀疑是文件格式的问题(dos,unix),但无法解决,高人赐教!

老弟,后面加$干什么啊,难道</a>这个东西一定要在行末吗?
是的,匹配</a>在行末的字符串
因为你的.*是一种“贪婪”模式,改为.*?试试。
re.findall("http://mp3.baidu.com/m?.*\+.*\",j)
试试


QUOTE:
原帖由 limodou 于 2006-10-12 08:35 发表
因为你的.*是一种“贪婪”模式,改为.*?试试。

已经改为

[Copy to clipboard] [ - ]
CODE:
link_a_re=re.compile('<a [^>]*>.*?</a>$').search(j)

但是仍然不能匹配

详细一点的说
比方说我已经找到歌曲目录的url:
http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%C7%A7%C0%EF%D6%AE%CD%E2+%D6%DC%BD%DC%C2%D7

用urllib模块抓下来进行匹配

[Copy to clipboard] [ - ]
CODE:
mp3samesonghtml=urllib.urlopen(i).readlines()
for i in mp3samesonghtml:
  #匹配一个</a>在末尾的行
  link_a_re=re.compile('<a [^>]*>.*?</a>$').search(i)
  if link_a_re:
    print i[link_a_re.start():link_a_re.end()]

结果是无输出
你上面的正则式没有分组,等于全匹配上了。你加上分组(),然后使用groups()得到一个list,选择你要的结果就行了。