这样的源码怎么提取呢?用什么函数提取 [已解决]
本帖最后由 101407 于 2014-4-7 16:46 编辑<div class="title" id="gbgc">股本构成</div>
</div>
<div class="Table">
<table class='table-border th-style' width='100%'><tr><th>变更日期</th><th>变更原因</th><th>总股本(万股)</th><th>已上市流通A股</th><th>受限流通股份(万股)</th></tr><tr><td>2013-12-31</td><td></td><td>29000.00</td><td>28988.73</td><td>11.27</td></tr><tr><td>2013-06-30</td><td></td><td>29000.00</td><td>26996.73</td><td>2003.27</td></tr><tr><td>2012-12-31</td><td></td><td>29000.00</td><td>25793.00</td><td>3207.00</td></tr><tr><td>2012-12-03</td><td></td><td>29000.00</td><td>25587.46</td><td>3412.55</td></tr><tr><td>2011-12-31</td><td></td><td>29000.00</td><td>11443.46</td><td>17556.55</td></tr><tr><td>2011-06-30</td><td></td><td>29000.00</td><td>11070.64</td><td>17929.36</td></tr><tr><td>2010-12-13</td><td></td><td>29000.00</td><td>10948.20</td><td>18051.80</td></tr><tr><td>2010-12-03</td><td></td><td>29000.00</td><td>10476.30</td><td>18523.70</td></tr><tr><td>2010-03-03</td><td></td><td>29000.00</td><td>7364.10</td><td>21635.90</td></tr><tr><td>2009-12-03</td><td>新股上市</td><td>29000.00</td><td>5894.10</td><td>23105.90</td></tr><tr><td>2009-11-24</td><td>新股发行</td><td>29000.00</td><td></td><td></td></tr><tr><td>2008-12-31</td><td></td><td>21635.90</td><td></td><td></td></tr><tr><td>2007-12-31</td><td></td><td>16643.00</td><td></td><td></td></tr></table >
</div>
</div> 论坛也有蛮多的例子的,也看了还是搞不了,
最好是不要下载,想用_INetGetSource读取 个人建议
1,先从基础开始学
2,出50块让别人帮你把数据最出来.给源码给你自己去折腾 <td>(.*?)</td>
还好楼主这个字符串相对简单。
请教一下A版,像下面这样的字符串:<tr><td>2013-12-31</td><td></td><td>28988.73</td><td>11.27</td></tr>
<td>2013-06-30</td><td></td><td>29000.00</td><td>26996.73</td><td>2003.27</td>
<td>2012-12-31</td><td></td><td>29000.00</td><td>25793.00</td><td>3207.00</td>
<tr><td>2012-12-03</td><td></td><td>29000.00</td><td>25587.46</td><td>3412.55</td></tr>如果只想要每行中带有<tr>..</tr>中的<td>..</td>之间的内容,上面给出的代码就只有第1、4行符合。如果是这样的,该如何写?
高手来了,有代码吗,可以写到word,或ecxel吗 本帖最后由 101407 于 2014-4-7 16:03 编辑
用A版主Au3.REHelper
提取的代码,现在问题怎么输入到Excel### 友情提示:本脚本由 Au3.REHelper 于 2014/04/07 15:02 自动生成,不保证其正确性,请自行测试 ###
#include <Array.au3>
Local $Str = ''
$Str &= ' <!--股本构成start-->' & @CRLF
$Str &= ' <div class="box-page box-table">' & @CRLF
$Str &= ' <div class="box-header">' & @CRLF
$Str &= ' <div class="title" id="gbgc">股本构成</div>' & @CRLF
$Str &= ' </div>' & @CRLF
$Str &= ' <div class="Table">' & @CRLF
$Str &= " <table class='table-border th-style' width='100%'><tr><th>变更日期</th><th>变更原因</th><th>总股本(万股)</th><th>已上市流通A股</th><th>受限流通股份(万股)</th></tr><tr><td>2013-12-31</td><td></td><td>29000.00</td><td>28988.73</td><td>11.27</td></tr><tr><td>2013-06-30</td><td></td><td>29000.00</td><td>26996.73</td><td>2003.27</td></tr><tr><td>2012-12-31</td><td></td><td>29000.00</td><td>25793.00</td><td>3207.00</td></tr><tr><td>2012-12-03</td><td></td><td>29000.00</td><td>25587.46</td><td>3412.55</td></tr><tr><td>2011-12-31</td><td></td><td>29000.00</td><td>11443.46</td><td>17556.55</td></tr><tr><td>2011-06-30</td><td></td><td>29000.00</td><td>11070.64</td><td>17929.36</td></tr><tr><td>2010-12-13</td><td></td><td>29000.00</td><td>10948.20</td><td>18051.80</td></tr><tr><td>2010-12-03</td><td></td><td>29000.00</td><td>10476.30</td><td>18523.70</td></tr><tr><td>2010-03-03</td><td></td><td>29000.00</td><td>7364.10</td><td>21635.90</td></tr><tr><td>2009-12-03</td><td>新股上市</td><td>29000.00</td><td>5894.10</t"
$Str &= 'd><td>23105.90</td></tr><tr><td>2009-11-24</td><td>新股发行</td><td>29000.00</td><td></td><td></td></tr><tr><td>2008-12-31</td><td></td><td>21635.90</td><td></td><td></td></tr><tr><td>2007-12-31</td><td></td><td>16643.00</td><td></td><td></td></tr></table >' & @CRLF
$Str &= ' </div>' & @CRLF
$Str &= ' </div>' & @CRLF
MsgBox(0, '原字符串', $Str)
Local $Test = StringRegExp($str, '<td>(.*?)</td>', 3)
If Not @Error Then MsgBox(0, '匹配数量: ' & UBound($Test), '其中元素为: ' & $Test)
_ArrayDisplay($Test, UBound($Test))用A版主Au3.REHelper
提取的代码,现在问题怎么输入到Excel
回复 4# haijie1223
你这个字串暂时没有好办法, 我用的办法是:
1. 将字串拆分成行
2. 判断前4个字符是否为'<tr>'
3. 找到合规则的行之后,再调用正则 <td>(.*?)</td> 来提取.
4. 提取到的数据存入数组保存起来
#include <array.au3>
Local $str='<tr><td>2013-12-31</td><td></td><td>28988.73</td><td>11.27</td></tr>'&@LF & _
'<td>2013-06-30</td><td></td><td>29000.00</td><td>26996.73</td><td>2003.27</td>'&@LF & _
'<td>2012-12-31</td><td></td><td>29000.00</td><td>25793.00</td><td>3207.00</td>'&@LF & _
'<tr><td>2012-12-03</td><td></td><td>29000.00</td><td>25587.46</td><td>3412.55</td></tr>'
;按行拆分
Local $array=StringSplit($str,@LF)
;出错退出
If @error Then Exit
;定义结果数组
Local $result
;从数据数组中逐行处理
For $i=1 To $array
;如果行的开头不合规则跳过
If StringCompare(StringLeft($array[$i],4),"<tr>")<>0 Then ContinueLoop
;提取数据
Local $tempArray=StringRegExp($array[$i],"<td>(.*?)</td>",3)
;出错跳过
If @error Then ContinueLoop
;重定义数组
ReDim $result[$i+1]
;保存提取的结果.
For $j=0 To UBound($tempArray)-1
$result[$i-1][$j]=$tempArray[$j]
Next
Next
_ArrayDisplay($result,"最终结果")
回复 9# lanfengc
嗯,拆分字符串获取的方法,这个倒是比较容易,也可以先获取<tr></tr>之间的内容,再进行一次正则提取。但是觉得似乎有一步到位的正则,自己又写不出来,所以求助一下Afan,不知道他是否能看到这个贴。感谢回复~ 回复 6# 101407
我看到M给我的网址了,你网络获取的源代码,用这个正则:<tr><td>(.*?)</td><td>(.*?)</td><td>(.*?)</td><td>(.*?)</td><td>(.*?)</td></tr> 哈哈,谢谢了,可以了! 还好楼主这个字符串相对简单。
请教一下A版,像下面这样的字符串:如果只想要每行中带有..中的..之间的内 ...
haijie1223 发表于 2014-4-7 14:54 http://www.autoitx.com/images/common/back.gif
试试(?i)(?!.*<tr>)<td>(.*?)</td>(?=.*</tr>) 回复 13# afan
求解释. 同求A大的解释,学习一下。
页:
[1]
2