找回密码
 加入
搜索
查看: 5213|回复: 14

[AU3基础] [已解决]正则提取txt文档内容~

 火.. [复制链接]
发表于 2012-6-4 18:33:09 | 显示全部楼层 |阅读模式
本帖最后由 t895073 于 2012-6-5 12:38 编辑

正则提取txt文档特定内容
txt内容为
------------------------------------------
<SCRIPT type=text/javascript>100</SCRIPT>
<TD>2011/01/10</TD>
<TD></TD>
<TD>2011/01/11</TD>
<TD>2011/01/12</TD>

<SCRIPT type=text/javascript>101</SCRIPT>
<TD>2011/01/20</TD>
<TD>2011/01/21</TD>
<TD></TD>
<TD>2011/01/23</TD>

<SCRIPT type=text/javascript>102</SCRIPT>
<TD>2011/02/10</TD>
<TD>2011/02/20</TD>
<TD>2011/02/21</TD>
<TD>2011/02/22</TD>

<SCRIPT type=text/javascript>103</SCRIPT>
<TD>2011/02/20</TD>
<TD>2011/02/19</TD>
<TD>2011/02/19</TD>
<TD>2011/01/20</TD>
------------------------------------------
我要抓出第三个<TD> </TD> 的内容
用msgbox 一次一个显示出来要怎么弄呢?
如: MSGBOX 第一次显示 2011/01/11 案确定后 在显示 "空"
在显示 2011/02/21 在显示2011/02/19 一直显示完!
谢谢
发表于 2012-6-4 19:20:52 | 显示全部楼层
#include <array.au3>
$file=FileOpen(@ScriptDir&"\test.txt",0)
$str=FileRead($file)
FileClose($file)
$arr=StringRegExp($str,"(?ms)(\<SCRIPT[\s\S]+?(\<TD[\s\S]*?){2}\<TD\>)(.*?)(?=\<\/TD\>)",3)
;_ArrayDisplay($arr)
For $n=2 To UBound($arr) Step 3
        MsgBox(0,"",$arr[$n])
Next
试下
发表于 2012-6-4 19:26:19 | 显示全部楼层
本帖最后由 haijie1223 于 2012-6-4 19:34 编辑

$string = _
                '------------------------------------------' & @CRLF & _
                '<SCRIPT type=text/javascript>100</SCRIPT>' & @CRLF & _
                '<TD>2011/01/10</TD>' & @CRLF & _
                '<TD></TD>' & @CRLF & _
                '<TD>2011/01/11</TD>' & @CRLF & _
                '<TD>2011/01/12</TD>' & @CRLF & _
                '<SCRIPT type=text/javascript>101</SCRIPT>' & @CRLF & _
                '<TD>2011/01/20</TD>' & @CRLF & _
                '<TD>2011/01/21</TD>' & @CRLF & _
                '<TD></TD>' & @CRLF & _
                '<TD>2011/01/23</TD>' & @CRLF & _
                '<SCRIPT type=text/javascript>102</SCRIPT>' & @CRLF & _
                '<TD>2011/02/10</TD>' & @CRLF & _                
                '<TD>2011/02/20</TD>' & @CRLF & _
                '<TD>2011/02/21</TD>' & @CRLF & _
                '<TD>2011/02/22</TD>' & @CRLF & _
                '<SCRIPT type=text/javascript>103</SCRIPT>' & @CRLF & _
                '<TD>2011/02/20</TD>' & @CRLF & _
                '<TD>2011/02/19</TD>' & @CRLF & _
                '<TD>2011/02/19</TD>' & @CRLF & _
                '<TD>2011/01/20</TD>' & @CRLF & _
                '------------------------------------------'

$result = StringRegExp($string, "(?m)(?<=TD>).*(?=<)", 3)
For $i = 2 To UBound($result)-1 Step 4
        MsgBox(0, "", $result[$i])
Next
Exit
 楼主| 发表于 2012-6-4 19:39:37 | 显示全部楼层
感谢回覆!
请问不用Step的话.
有办法可以直接用正则就抓出第三个<TD></TD>内容吗?
发表于 2012-6-4 19:47:13 | 显示全部楼层
3楼正解,学习了
发表于 2012-6-4 19:51:34 | 显示全部楼层
$file=FileOpen(@ScriptDir&"\test.txt",0)
$str=FileRead($file)
FileClose($file)
$regexp=ObjCreate("vbscript.regexp")
With $regexp
        .global=1
        .multiline=1
        .ignorecase=1
        .pattern="(\<script[\s\S]+?(\<td[\s\S]*?){2}\<td\>)(.*?)(?=\<\/td\>)"
        If .test($str) Then
                $arr=.execute($str)
                For $match In $arr
                        MsgBox(0,"",$match.submatches(2))
                Next
        EndIf
EndWith
这个也可以试一下

评分

参与人数 1金钱 +12 贡献 +1 收起 理由
user3000 + 12 + 1 学习下!

查看全部评分

发表于 2012-6-4 20:19:08 | 显示全部楼层
T>\s+(?:<TD>.*\s+){2}<TD>(.*)</TD

评分

参与人数 5金钱 +90 贡献 +18 收起 理由
shqf + 10 + 2 学习了
lixiaolong + 30 + 2 学习了!
haijie1223 + 5 + 5 膜拜一下A版
lpxx + 30 + 8 看你的正则总能学到些东西
user3000 + 15 我的动力, 吼吼!

查看全部评分

发表于 2012-6-4 21:20:45 | 显示全部楼层
回复 7# afan
A版很久不见啊!
发表于 2012-6-4 22:58:27 | 显示全部楼层
afan 发表于 2012-6-4 20:19



看你的正则总能学到些东西
发表于 2012-6-4 23:31:22 | 显示全部楼层
用 _ArrayDisplay() 不好吗?!...
发表于 2012-6-4 23:38:19 | 显示全部楼层
本帖最后由 lixiaolong 于 2012-6-4 23:42 编辑

#include <Array.au3>

Local $Str = _
                '<SCRIPT type=text/javascript>100</SCRIPT>' & @CRLF & _
                '<TD>2011/01/10</TD>' & @CRLF & _
                '<TD></TD>' & @CRLF & _
                '<TD>2011/01/11</TD>' & @CRLF & _
                '<TD>2011/01/12</TD>' & @CRLF & @CRLF & _
                '<SCRIPT type=text/javascript>101</SCRIPT>' & @CRLF & _
                '<TD>2011/01/20</TD>' & @CRLF & _
                '<TD>2011/01/21</TD>' & @CRLF & _
                '<TD></TD>' & @CRLF & _
                '<TD>2011/01/23</TD>' & @CRLF & @CRLF & _
                '<SCRIPT type=text/javascript>102</SCRIPT>' & @CRLF & _
                '<TD>2011/02/10</TD>' & @CRLF & _
                '<TD>2011/02/20</TD>' & @CRLF & _
                '<TD>2011/02/21</TD>' & @CRLF & _
                '<TD>2011/02/22</TD>' & @CRLF & @CRLF & _
                '<SCRIPT type=text/javascript>103</SCRIPT>' & @CRLF & _
                '<TD>2011/02/20</TD>' & @CRLF & _
                '<TD>2011/02/19</TD>' & @CRLF & _
                '<TD>2011/02/19</TD>' & @CRLF & _
                '<TD>2011/01/20</TD>' & @CRLF

Local $Test = StringRegExp($str, '(?s)(?=<SCRIPT.*?/SCRIPT>\s+(?:<TD>(.*?)</TD>.*?){3})', 3)
_ArrayDisplay($Test, UBound($Test))

If Not @error Then
        For $i = 0 To UBound($Test) - 1
                MsgBox(0, '', $Test[$i])
        Next
EndIf
发表于 2012-6-5 10:43:36 | 显示全部楼层
(?s)T>(?:.*?>){5}([^<]+)
要做就做最简单的
发表于 2012-6-5 11:10:59 | 显示全部楼层
回复 13# love5173


    有些符号不知道怎么用,兄台能讲解一下你的正则思路么,谢谢!
发表于 2012-6-5 11:15:29 | 显示全部楼层
回复 14# haijie1223

是根据T>后面的>符号次数来取值的,出现5个>后取后面不等于<的值
 楼主| 发表于 2012-6-5 12:38:04 | 显示全部楼层
这时候就知道正则表达强
谢谢帮忙!!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-29 17:50 , Processed in 0.092687 second(s), 29 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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