mxykyou 发表于 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个(标红)的时间。请教如何使用正则表达式抓取离关键词最近的结果

kevinch 发表于 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)

lixiaolong 发表于 2014-5-18 21:22:00

([\d-\s:]+)</SPAN>\v+<.+?>(?=客服B说)
页: [1]
查看完整版本: 正则表达式求助