Python Regex没有捕捉模式

时间:2013-09-20 04:04:50

标签: python regex python-2.7

我基本上是从特定页面抓取数据。 我有这段代码:

regex = '<ul class="w462">(.*?)</ul>'

opener.open(baseurl)
urllib2.install_opener(opener)

... rest of code omitted ...

requestData = urllib2.urlopen(request)
htmlText = requestData.read()

pattern = re.compile(regex)
movies = re.findall(pattern, htmlText)

# Lines below will always returns empty.
if not movies:
    print "List is empty. Printing source instead...", "\n\n"
    print htmlText
else:
    print movies

htmlText的内容:

<ul class="w462">

... bunch of <li>s (the content i want to retrieve).

</ul>

htmlText包含正确的源代码(我试图ctrl + F它,我可以验证它包含所需的ul元素。只是我的正则表达式无法获得所需的内容。

我试图改用它:

movies = re.findall(r'<ul class="w462">(.*?)</ul>', htmlText)

有谁知道出了什么问题?

1 个答案:

答案 0 :(得分:2)

默认情况下,正则表达式中的.匹配除换行符之外的任何字符。所以你的正则表达式不能匹配跨越多行(包含至少一个换行符)的任何内容。

将编译行更改为:

pattern = re.compile(regex, re.DOTALL)

更改.的含义。使用re.DOTALL.将匹配任何字符(包括换行符)。