使用正则表达式无法从字符串中查找数据,而string.find()工作得很好

Abh*_*ogi 1 python regex urllib web-scraping

import re
import urllib
p = urllib.urlopen("http://sprunge.us/QZhU")
page = p.read()
pos = page.find("<h2><span>")
print page[pos:pos+48]
c = re.compile(r'<h2><span>(.*)</span>')
print c.match(page).group(1)
Run Code Online (Sandbox Code Playgroud)

当我运行它:

shadyabhi@archlinux $ python2 temp.py 
<h2><span>House.S08E02.HDTV.XviD-LOL.avi</span> 
Traceback (most recent call last):
  File "temp.py", line 8, in <module>
    print c.match(page).group(1)
AttributeError: 'NoneType' object has no attribute 'group'
shadyabhi@archlinux $ 
Run Code Online (Sandbox Code Playgroud)

如果我可以使用string.find找到一个字符串,那么当我使用正则表达式时会出现什么问题.我试过看http://docs.python.org/howto/regex.html#regex-howto但没有帮助.

NPE*_*NPE 6

match仅匹配字符串的开头.使用search,finditerfindall.

还要注意*贪婪.您可能想要将正则表达式更改为r'<h2><span>(.*?)</span>'.

总之,以下适用于我:

import re
import urllib
p = urllib.urlopen("http://sprunge.us/QZhU")
page = p.read()
pos = page.find("<h2><span>")
print page[pos:pos+48]
c = re.compile(r'<h2><span>(.*?)</span>')
print c.search(page).group(1)
Run Code Online (Sandbox Code Playgroud)