我无法在过滤器表达式中使用re.search。
我正在尝试使用re.search从列表中提取href值,其中每个元素都是一个html行。
这是我正在做的事情:
>>> filter(lambda html_line: re.search('.*a href=\"([^\"]*).*', html_line), data)
[u'Directory Feb 28 23:57 <b><a href="/MyApp/LogBrowser?type=crawler/2014.02.28">2014.02.28</a></b>'
u'Directory Mar 01 23:59 <b><a href="/MyApp/LogBrowser?type=crawler/2014.03.01">2014.03.01</a></b>'
u'Directory Mar 02 23:50 <b><a href="/MyApp/LogBrowser?type=crawler/2014.03.02">2014.03.02</a></b>'
u'Directory Mar 03 23:59 <b><a href="/MyApp/LogBrowser?type=crawler/2014.03.03">2014.03.03</a></b>'
u'Directory Mar 04 23:50 <b><a href="/MyApp/LogBrowser?type=crawler/2014.03.04">2014.03.04</a></b>'
u'Directory Mar 05 23:50 <b><a href="/MyApp/LogBrowser?type=crawler/2014.03.05">2014.03.05</a></b>'
u'Directory Mar 06 23:50 <b><a href="/MyApp/LogBrowser?type=crawler/2014.03.06">2014.03.06</a></b>'
u'Directory Mar 07 23:50 <b><a href="/MyApp/LogBrowser?type=crawler/2014.03.07">2014.03.07</a></b>'
u'Directory Mar 08 23:50 <b><a href="/MyApp/LogBrowser?type=crawler/2014.03.08">2014.03.08</a></b>']
我的re.search调用似乎工作正常。
例如,这有效:
>>> for html_line in data:
print re.search('.*a href=\"([^\"]*).*', html_line).group(1)
/MyApp/LogBrowser?type=crawler/2014.02.28
/MyApp/LogBrowser?type=crawler/2014.03.01
/MyApp/LogBrowser?type=crawler/2014.03.02
/MyApp/LogBrowser?type=crawler/2014.03.03
/MyApp/LogBrowser?type=crawler/2014.03.04
/MyApp/LogBrowser?type=crawler/2014.03.05
/MyApp/LogBrowser?type=crawler/2014.03.06
/MyApp/LogBrowser?type=crawler/2014.03.07
/MyApp/LogBrowser?type=crawler/2014.03.08
答案 0 :(得分:3)
filter
只会过滤掉它赢得的项目并且不会返回href值,您可以使用列表理解:
r = re.compile(r'.*a href=\"([^\"]*).*')
data = [x.group(1) for x in (r.search(html_line) for html_line in data)
if x is not None]