繁体   English   中英

如何找到所有重复模式并在python中捕获子模式?

[英]How to find all repeat pattern and capture the sub-pattern in python?

我尝试从网页中获取一些数据,如下所示

<td><a href="some_web_site">Mr. Google</a></td>
<td>12.42%</td>
<td>1360</td>
<td><span style="color: #E3170D">49.12%</span></td>
<td><span style="color: #008000">2.513</span></td>
<td><span style="color: #E3170D">0.945</span></td>
<td>5.074</td>
<td>5.371</td>
<td>8.424</td>
</tr>

当然,每行的末尾都有一个\\ n。 我尝试使用“ Mr. Google”这个名字,并将数据也当作一行放在我的数据矩阵中。 (同一网页上还有其他行的其他数据)似乎很难一次匹配所有这些行。 我能弄清楚的唯一方法是:

pattern=re.complie(r'>([\w\s]*)</a></td>\n
                     (?:<td>([\d\.\%]*)</td>\n){2} 
                     (?:.*>([\d\.\%]*)</span></td>\n){3}
                     (?:<td>([\d\.]*)</td>\n){3}')

不幸的是,它仅匹配最后一个,即“ Google先生”,1360、0.945、8.424,但不是所有数据。 我是否应该重复使用模式几次而不是使用{2}或{3}?也许重复可以解决它,但确实很丑陋。:((我想知道是否有人可以帮助我摆脱这种重新模式。

另一种选择是使用不同的简单模式分别获取名称和数据。 问题是网页中还有其他一些单独的数据,因此我不想将此“名称数据”行与单独的数据混合使用。 我别无选择,只需要一次获取名称和数据,这样我就可以确保获得所需的正确数据。

谢谢。

正则表达式下方正在>和<之间寻找任何可见字符(不是空格,不是换行符)

data = re.findall('>\s*([^<\n\r]+)\s*<', html)
print data

这仅适用于您作为示例提供的示例字符串。

最好使用xpath:

import requests
import urllib2
from lxml import html
url = 'HTTP'

page = requests.get(url)
tree = html.fromstring(page.text)

a = tree.xpath('//td/a/text()|//td/text()')
b = tree.xpath('//td/span/text()') 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM