papapa314 发表于 2011-7-6 23:20:16

txt格式问题?一个正则问题求助(已解决)

本帖最后由 papapa314 于 2011-7-7 19:08 编辑

各位好,我将3.txt(见附件)的文本复制到afan的正则测试助手里可以获得如下结果

但是很奇怪的是,我用如下代码,却得不到同样的结果
#include<array.au3>

$text=FileRead(@ScriptDir&"\3.txt")

$contents=StringRegExp($text,'(?s)(.+?)"\r',3)

_ArrayDisplay($contents)

结果为

请问这个是不是txt格式的问题,应该如何解决这个问题呢?
多谢各位。

papapa314 发表于 2011-7-6 23:35:54

校园网上论坛极为痛苦,尤其是发帖,搞了十几分钟没发好,各位请见谅。

pcbar 发表于 2011-7-7 08:23:36

本帖最后由 pcbar 于 2011-7-7 08:27 编辑

不太明白楼主要做什么 ,是提取文字标题就这样
#include<array.au3>
$text=FileRead(@ScriptDir&"\3.txt")
$text=StringReplace($text,"<BR>","")
$contents=StringRegExp($text,'\[[^\[]+',3)
_ArrayDisplay($contents)

zysanjing1 发表于 2011-7-7 08:41:45

楼主的意思是以换行符为分隔符分割文本吗?

papapa314 发表于 2011-7-7 10:15:44

回复 3# pcbar


    谢谢pcbar老大。我的目的是要把"\r和"\r之间的文本提取出来,用afan的正则测试工具可以看到提取出4项结果,但用arraydisplay却只看到1项结果。后来仔细看了下,发现如果文本开头有\r的项arraydisplay无法显示出来,但用一个循环可以照常提取。问题就出在这里了。

papapa314 发表于 2011-7-7 10:24:00

回复 3# pcbar


我是用如下代码提取文档内容以及文件名,效果是不错的,但就是效率比较低,速度很慢,特别是3.txt文件很大的时候,不知道有改进的办法没有?    谢谢pcbar老大。

          $contents=StringRegExp(FileRead(@ScriptDir&"\3.txt"),'(?s)(.+?)"\r',3)
       
               $num=UBound($contents)
       
        $dir=@ScriptDir&"\"&@HOUR&"时"&@MIN&"分提取"
       
        DirCreate($dir)
       
        For $i=0 To $num-1
                TrayTip("提示","共有"&$num&"个文档等待提取,目前正在提取第"&$i&"个",5)
                $title=StringRegExp($contents[$i],"(.+?)\|",3)
                FileWrite($dir&"\"&$title&".txt",$contents[$i])
                _ReplaceStringInFile(@ScriptDir&"\"&$dir&"\"&$title&".txt","<BR>",@CRLF)
        Next

        TrayTip("提示","提取完毕,文档保存程序目录下"&$dir&"文件夹中",50)

3mile 发表于 2011-7-7 17:15:56

回复 6# papapa314
;$contents = StringRegExp(FileRead(@ScriptDir & "\3.txt"), '(?s)(.+?)"\r', 3)
$contents=StringSplit(FileRead(@ScriptDir & "\3.txt"),'"'&@CRLF,3)

$num = UBound($contents)
$dir = @ScriptDir & "\" & @HOUR & "时" & @MIN & "分提取"
DirCreate($dir)
For $i = 0 To $num - 1
        TrayTip("提示", "共有" & $num & "个文档等待提取,目前正在提取第" & $i & "个", 5)
        $title = StringRegExp($contents[$i], "(?m)^.*?(?=\|)", 3)
        FileWrite($dir & "\" & $title & ".txt", StringReplace($contents[$i],"<BR>",@CRLF))
        ;_ReplaceStringInFile(@ScriptDir & "\" & $dir & "\" & $title & ".txt", "<BR>", @CRLF)
Next

TrayTip("提示", "提取完毕,文档保存程序目录下" & $dir & "文件夹中", 50)

chinafla 发表于 2011-7-7 17:16:50

顶楼上
标记

papapa314 发表于 2011-7-7 19:08:00

回复 7# 3mile


    呵呵,多谢向阳坊大哥,原来速度最慢的一步是 _ReplaceStringInFile(@ScriptDir & "\" & $dir & "\" & $title & ".txt", "<BR>", @CRLF),应该在写入txt文件之前前直接替换掉<BR>.
其他的StringRegExp跟stringreplace执行起来速度差别不是太大。
页: [1]
查看完整版本: txt格式问题?一个正则问题求助(已解决)