找回密码
 加入
搜索
查看: 2072|回复: 3

[AU3基础] 正则表达式求助

[复制链接]
发表于 2014-5-12 15:20:14 | 显示全部楼层 |阅读模式
源代码:
<SPAN class=member>系统消息说:</SPAN><SPAN class=time>2014-05-12 08:01:43</SPAN>
<DIV id=ext-gen1071 class=message-body>会话建立</DIV><SPAN class=servicer>客服A说:</SPAN><SPAN class=time>2014-05-12 08:01:50</SPAN>
<DIV id=ext-gen1072 class=message-body>您好</DIV><SPAN class=member>
</DIV><SPAN class=member>系统消息说:</SPAN><SPAN class=time>2014-05-12 08:06:55</SPAN>
<DIV id=ext-gen1079 class=message-body>会话建立</DIV><SPAN class=servicer>客服B说:

需求是提取“客服B”说之前的最近的1个系统消息说的时间(标红),使用正则"系统消息说:[\S\s]*?class=time>(.*?)</SPAN>[\s]*<DIV[\S\s]*会话建立[\S\s]*客服B说“只能抓取到第一个时间2014-05-12 08:01:43,抓不到第2个(标红)的时间。请教如何使用正则表达式抓取离关键词最近的结果
发表于 2014-5-12 19:22:32 | 显示全部楼层
#include <array.au3>

$str="<SPAN class=member>系统消息说:</SPAN><SPAN class=time>2014-05-12 08:01:43</SPAN>" & _
"<DIV id=ext-gen1071 class=message-body>会话建立</DIV><SPAN class=servicer>客服A说:</SPAN><SPAN class=time>2014-05-12 08:01:50</SPAN>" & _
"<DIV id=ext-gen1072 class=message-body>您好</DIV><SPAN class=member>" & _
"</DIV><SPAN class=member>系统消息说:</SPAN><SPAN class=time>2014-05-12 08:06:55</SPAN>" & _
"<DIV id=ext-gen1079 class=message-body>会话建立</DIV><SPAN class=servicer>客服B说:"

$arr=StringRegExp($str,"(?ms)系统消息说[\s\S]*?([\d\-]+ [\d:]+)[\s\S]*?客服B说",3)
If IsArray($arr) Then _ArrayDisplay($arr)
是这个意思?
发表于 2014-5-12 21:19:21 | 显示全部楼层
使用mshtml解析,逻辑上容易理解,可以准确得到前一个。
http://www.autoitx.com/thread-44262-1-1.html

#include <IE.au3>
#include <MSHtml.au3> ;使用mshtml解析html
Local $html = _ 
'<SPAN class=member>系统消息说:</SPAN><SPAN class=time>2014-05-12 08:01:43</SPAN>' & @CRLF & _
'<DIV id=ext-gen1071 class=message-body>会话建立</DIV><SPAN class=servicer>客服A说:</SPAN><SPAN class=time>2014-05-12 08:01:50</SPAN>' & @CRLF & _
'<DIV id=ext-gen1072 class=message-body>您好</DIV><SPAN class=member>' & @CRLF & _
'</DIV><SPAN class=member>系统消息说:</SPAN><SPAN class=time>2014-05-12 08:06:55</SPAN>' & @CRLF & _
'<DIV id=ext-gen1079 class=message-body>会话建立</DIV><SPAN class=servicer>客服B说:'

Local $doc = _MHDocGetObj()
_MHDocWriteHTML($doc,$html) ;写入html源码
;解析
Local $spans = _IETagNameGetCollection($doc,"span") ;返回span集合
Local $num = @extended - 2 ;倒数第二个元素序号(元素个数 - 1 是最后一个元素序号)
Local $span = _IETagNameGetCollection($doc,"span",$num) ;得到对象
MsgBox(64,"成功提取",$span.outertext)

发表于 2014-5-18 21:22:00 | 显示全部楼层
([\d-\s:]+)</SPAN>\v+<.+?>(?=客服B说)
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-7-8 10:14 , Processed in 0.079707 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表