yiruirui 发表于 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\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
格式:
地区 律师名字
手机号
所以特意来此求高手相助!

yiruirui 发表于 2010-11-1 15:00:30

顺便补充一点:
For $p=1 To UBound($cReg)-1
这里为什么从1开始呢?是因为我的这个正则表达式:
$cReg = StringRegExp($stext,'<STRONG>(.+?律师)</STRONG>',3) 并不完善,返回的数组中第一个都是
上海律师,我要的是人名+律师,所以这里把它过滤掉了.当然也期待有更完善的办法.期待中....
先说3Q!

afan 发表于 2010-11-1 16:04:58

'(?s)law01">([^<]+?)\s*<.+?<strong>([^<]+?)<.+?law06">([^<]+?)<'

yiruirui 发表于 2010-11-1 16:12:02

回复 3# afan


    你这个是针对 上海律师这个的吗?能处理掉吗?

afan 发表于 2010-11-1 16:21:27

一次捕获所有组,然后你想如何组织输出文档都行

yiruirui 发表于 2010-11-1 16:24:13

回复 5# afan


    一次捕获所有组?请问能具体点吗?不懂你的意思!
'(?s)law01">([^<]+?)\s*<.+?<strong>([^<]+?)<.+?law06">([^<]+?)<'
就是说这个正则表达式可以直接找出所有满足条件的要求?

yiruirui 发表于 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为空白.什么情况?

afan 发表于 2010-11-1 17:46:01

很简单的东西为何不用返回值查找问题所在呢?

yiruirui 发表于 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

yiruirui 发表于 2010-11-1 18:01:06

回复 9# yiruirui


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

可有办法?

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

yiruirui 发表于 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\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

yiruirui 发表于 2010-11-1 23:04:07

回复 11# afan


    请问A版,(?s)law01">([^<]+?)\s*<.+?<strong>([^<]+?)<.+?law06">\D*?(\d+)
这里的(?s)有什么作用?我认为完全不需要,但是去掉之后出现获取失败的信息窗口。查了很多正则的资料都没找到,麻烦A版给点说明!3Q!

afan 发表于 2010-11-1 23:05:40

加了(?s)之后“.”可以匹配到任意字符,包括换行

yiruirui 发表于 2010-11-2 09:03:35

回复 14# afan


    哦,晓得了!3Q!
页: [1]
查看完整版本: 正则表达式+文件输出格式,代码已经给出!有点问题,格式问题!(已解决)