aryce 发表于 2018-12-6 00:04:19

[已解决]小白求助一个正则表达式

本帖最后由 aryce 于 2018-12-9 23:29 编辑

先说正题
<p class="op_exactqa_s_prop c-gap-bottom-small">
                                    马化腾年龄:
                              </p>
                                                <div class="op_exactqa_s_answer">
                                                                47岁
                                                                                                      </div>
                                                                                                                                                            <p class="op_exactqa_s_abstract c-gap-top-small">
从这一段中取出 “47”这个数字。


好了,现在说背景 ,我想给程序加个时间锁 , 超过指定时间,就打不开了。
这个时间从哪里来呢 ,我在百度搜索“马化腾年龄” 然后超过“49” 就直接结束,47 48都可以。
代码如下:
#include <Inet.au3>
#include <IE.au3>
$oie = _IECreate ("https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=0&rsv_idx=1&tn=baidu&wd=%E9%A9%AC%E5%8C%96%E8%85%BE%E5%B9%B4%E9%BE%84&rsv_pq=915e54fc0001bdb6&rsv_t=04e6zdyE%2BfFPow%2F0BDHFAvC6v9C9hHqpN%2BycQW8KSfovvAzwoezTophiVtY&rqlang=cn&rsv_enter=1&rsv_sug3=20&rsv_sug1=8&rsv_sug7=101",0,0,1)
$body = _IEDocReadHTML($oie)
$timeout = StringRegExpReplace ( $body, "表达式", "" )

aryce 发表于 2018-12-6 00:22:28

对了 应该是匹配到除47以外的用StringRegExpReplace替换成空值, 或者还有更简单的办法吗?

qq362817567 发表于 2018-12-6 13:35:04

### 友情提示:本脚本由 Au3.REHelper 于 2018/12/06 13:30 自动生成,不保证其正确性,请自行测试 ###
#include <Array.au3>
Local $sSource = _
                '<p class="op_exactqa_s_prop c-gap-bottom-small">' & @CRLF & _
                '                                    马化腾年龄:' & @CRLF & _
                '                              </p>' & @CRLF & _
                '                                                <div class="op_exactqa_s_answer">' & @CRLF & _
                '                                                                47岁' & @CRLF & _
                '                                                                                                      </div>' & @CRLF & _
                '                                                                                                                                                            <p class="op_exactqa_s_abstract c-gap-top-small">'
;~MsgBox(0, '源字符串', $sSource)
Local $aSRE = StringRegExp($sSource, '(\d+)岁', 3)
If Not @Error Then MsgBox(0, '匹配数量: ' & UBound($aSRE), '其中元素为: ' & $aSRE)
_ArrayDisplay($aSRE, UBound($aSRE))
====================================================
不用那么麻烦,宽松的话(\d+)岁能直接匹配到,不放心的话,可以写严格点:answer">\s+(\d+)岁

aryce 发表于 2018-12-6 19:27:21

qq362817567 发表于 2018-12-6 13:35
====================================================
不用那么麻烦,宽松的话(\d+)岁能直接匹配到, ...

谢楼上搞定了
#include <Inet.au3>
#include <IE.au3>
$oie = _IECreate ("https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=0&rsv_idx=1&tn=baidu&wd=%E9%A9%AC%E5%8C%96%E8%85%BE%E5%B9%B4%E9%BE%84&rsv_pq=915e54fc0001bdb6&rsv_t=04e6zdyE%2BfFPow%2F0BDHFAvC6v9C9hHqpN%2BycQW8KSfovvAzwoezTophiVtY&rqlang=cn&rsv_enter=1&rsv_sug3=20&rsv_sug1=8&rsv_sug7=101",0,0,1)
$body = _IEDocReadHTML($oie)
$timeout = StringRegExp ($body,"(\d+)岁",1)
MsgBox(0,"",$timeout)
页: [1]
查看完整版本: [已解决]小白求助一个正则表达式