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

[AU3基础] 正则表达式+文件输出格式,代码已经给出!有点问题,格式问题!(已解决)

  [复制链接]
发表于 2010-11-1 14:57:32 | 显示全部楼层 |阅读模式
本帖最后由 yiruirui 于 2010-11-1 20:46 编辑
#include<IE.au3>
#include<array.au3>
#include<file.au3>
$file=FileOpen("result.txt",10)
FileClose($file)
$k=1
$line1=1
$line2=2
$line3=1
Dim $i,$j,$k,$p
$line=1
For $k=1 To 2
        $oIE=_IECreate("http://www.9ask.cn/search/findindex.asp?page="&$k&"&pnameid=2",0,0,1,0)
        $stext=_IEBodyReadHTML($oIE)
        $aReg = StringRegExp($sText, '\D(1[358]\d{9})\D', 3)

$bReg = StringRegExp($sText,'\[上海.+?\]',3)
$cReg = StringRegExp($stext,'<STRONG>(.+?律师)</STRONG>',3)
for $j=0 to UBound($bReg)-1
               _FileWriteToLine("result.txt",$line1,$bReg[$j],0)
        $line1=$line1+2;
Next

for $i=0 To UBound($bReg)-1
        _FileWriteToLine("result.txt",$line2,$aReg[$i],0)
        $line2=$line2+2;
Next

For $p=1 To UBound($cReg)-1
        $text=FileReadLine("result.txt",$line)
        _FileWriteToLine("result.txt",$line3,$text&$cReg[$p],1)
        $line3=$line3+2
        $line=$line+2
Next
Next
这样的输出结果不是我想要的格式!
我想要的格式如下:
[上海 静安区]刘仍安律师
13341686683
[上海 浦东新区]宫克律师
18917010683
格式:
地区 律师名字
手机号
所以特意来此求高手相助!

评分

参与人数 1金钱 +10 收起 理由
afan + 10 感谢主动将修改帖子分类为[已解决],请继续 ...

查看全部评分

 楼主| 发表于 2010-11-1 15:00:30 | 显示全部楼层
顺便补充一点:
For $p=1 To UBound($cReg)-1
这里为什么从1开始呢?是因为我的这个正则表达式:
$cReg = StringRegExp($stext,'<STRONG>(.+?律师)</STRONG>',3) 并不完善,返回的数组中第一个都是
上海律师,我要的是人名+律师,所以这里把它过滤掉了.当然也期待有更完善的办法.期待中....
先说3Q!
发表于 2010-11-1 16:04:58 | 显示全部楼层
'(?s)law01">([^<]+?)\s*<.+?<strong>([^<]+?)<.+?law06">([^<]+?)<'
 楼主| 发表于 2010-11-1 16:12:02 | 显示全部楼层
回复 3# afan


    你这个是针对 上海律师这个的吗?能处理掉吗?
发表于 2010-11-1 16:21:27 | 显示全部楼层
一次捕获所有组,然后你想如何组织输出文档都行

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2010-11-1 16:24:13 | 显示全部楼层
回复 5# afan


    一次捕获所有组?请问能具体点吗?不懂你的意思!
'(?s)law01">([^<]+?)\s*<.+?<strong>([^<]+?)<.+?law06">([^<]+?)<'
就是说这个正则表达式可以直接找出所有满足条件的要求?
 楼主| 发表于 2010-11-1 16:48:53 | 显示全部楼层
回复 5# afan


    #include<IE.au3>
#include<array.au3>
#include<file.au3>
$file=FileOpen("result1.txt",10)
$line3=1
Dim $p
MsgBox(0,"a","(?s)law01"&'">([^<]+?)\s*<.+?<strong>([^<]+?)<.+?law06"'& ">([^<]+?)<")
For $k=1 To 2
        $oIE=_IECreate("http://www.9ask.cn/search/findindex.asp?page="&$k&"&pnameid=2",0,0,1,0)
        $stext=_IEBodyReadHTML($oIE)
        $cReg = StringRegExp($stext,"(?s)law01"&'">([^<]+?)\s*<.+?<strong>([^<]+?)<.+?law06"'& ">([^<]+?)<" ,3)
        For $p=0 To UBound($cReg)-1
        _FileWriteToLine("result1.txt",$line3,$cReg[$p],0)
        $line3=$line3+2
Next
Next
FileClose($file)

运行结果result.txt为空白.什么情况?
发表于 2010-11-1 17:46:01 | 显示全部楼层
很简单的东西为何不用返回值查找问题所在呢?
 楼主| 发表于 2010-11-1 18:00:20 | 显示全部楼层
回复 8# afan


    #include <INet.au3>
#include <File.au3>
        $file=FileOpen("result.txt",10)
$a = 1
$k = 1
For $k = 1 To 2
        $source = _INetGetSource(" http://www.9ask.cn/search/findindex.asp?page=" & $k & "&pnameid=2")
        $aReg = StringRegExp($source, '(?s)law01">([^<]+?)\s*<.+?<strong>([^<]+?)<.+?law06">([^<]+?)<', 3)
        For $i = 0 To UBound($aReg) - 1
                        _FileWriteToLine("result.txt", $a, $aReg[$i], 0)
                        if Mod($i,2) == 0 Then
                        $a += 0
                    Else
                        $a += 1
                        EndIf
                       
                       
        Next
Next
 楼主| 发表于 2010-11-1 18:01:06 | 显示全部楼层
回复 9# yiruirui


    格式还是不满足要求,我想
地址 律师
手机号码

可有办法?
发表于 2010-11-1 18:32:54 | 显示全部楼层
Local $sData, $sR, $i, $out = '', $File = 'test.txt'
For $x = 1 to 2
        $sData = InetRead('http://www.9ask.cn/search/findindex.asp?page=' & $x & '&pnameid=2')
        $sR = StringRegExp(BinaryToString($sData), '(?s)law01">([^<]+?)\s*<.+?<strong>([^<]+?)<.+?law06">\D*?(\d+)', 3)
        For $i = 0 To UBound($sR) - 1 Step 3
                $out &= $sR[$i] & $sR[$i + 1] & @CRLF & $sR[$i + 2] & @CRLF
        Next
Next
If $out = '' Then Exit MsgBox(48, '', '获取失败')
FileDelete($File)
If FileWrite($File, $out) Then ShellExecute($File)
 楼主| 发表于 2010-11-1 20:45:47 | 显示全部楼层
回复 11# afan


    非常感谢A版主!
有个比较容易点的办法也可以:
分享给大家吧:
#include<IE.au3>
#include<array.au3>
#include<file.au3>
$file=FileOpen("result.txt",10)
;FileClose($file)
$k=1
$line1=1
$line2=2
$line3=1
Dim $i,$j,$p
$line=1
For $k=1 To 2
        $oIE=_IECreate(" http://www.9ask.cn/search/findindex.asp?page="&$k&"&pnameid=2",0,0,1,0)
        $stext=_IEBodyReadHTML($oIE)
                $stext=StringRegExpReplace ($stext, "\r\n", "")

$aReg = StringRegExp($sText, '\D(1[358]\d{9})\D', 3)
$bReg = StringRegExp($sText,'\[上海.+?\]',3)
$cReg = StringRegExp($stext,'\[上海.*?<STRONG>(.+?律师)<\/STRONG>',3)

for $j=0 to UBound($bReg)-1
                _FileWriteToLine("result.txt",$line1,$bReg[$j]&$cReg[$j],0)
        _FileWriteToLine("result.txt",$line1+1,$aReg[$j],0)
Next

next
 楼主| 发表于 2010-11-1 23:04:07 | 显示全部楼层
回复 11# afan


    请问A版,(?s)law01">([^<]+?)\s*<.+?<strong>([^<]+?)<.+?law06">\D*?(\d+)
这里的(?s)有什么作用?我认为完全不需要,但是去掉之后出现获取失败的信息窗口。查了很多正则的资料都没找到,麻烦A版给点说明!3Q!
发表于 2010-11-1 23:05:40 | 显示全部楼层
加了(?s)之后“.”可以匹配到任意字符,包括换行
 楼主| 发表于 2010-11-2 09:03:35 | 显示全部楼层
回复 14# afan


    哦,晓得了!3Q!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-22 16:15 , Processed in 0.085097 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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