找回密码
 加入
搜索
查看: 6060|回复: 13

[效率算法] 请教各位一个正则算法[已解决]

  [复制链接]
发表于 2012-9-17 00:20:32 | 显示全部楼层 |阅读模式
本帖最后由 502762378 于 2012-9-17 12:44 编辑

最近写了一个处理数据量很大的脚本,始终觉得效率低下,其中一段数据有这样的规则:
1234:  

    1234:    1
        

    234:     c:\1.txt
        
    3451:    3
        
    3456:    good good study
          day day up
                         
    4567:    6
          
demo中的数据全部是瞎搞的,每俩有数据的行中间夹着一到两行不等的空白行,第一行冒号后空白,想要得到每行字符窜冒号后边除去空白符的数组也就是包含'1'、'c:\1.txt'、 '3'、'good good study'&@crlf&'day day up'(这厮有两行或者多行,难倒我的地方)、'6'的数组,惭愧自己不会正则,特此请教,谢谢各位了!

鉴于举出例子的模糊性,上一条标准的数据,其实是在搞文件服务器的审计,希望可以说明问题,谢谢
打开的对象:

        对象服务器:        Security

        对象类型:        File

        对象名称:        C:\LOREN\abc.txt

        句柄 ID:        1956

        操作 ID:        {0,486852256}

        进程 ID:        3388

        图像文件名:        C:\WINDOWS\explorer.exe

        主要用户名:        E000923

        主要域:        XXXX-WH

        主要登录 ID:        (0x0,0x278363)

        客户端用户名:        E000923

        客户端域:        XXXX-WH

        客户端登录 ID:        (0x0,0x278363)

        访问次数:        (0x0,0x278363)

        特权:        WRITE_OWNER 
                WriteAttributes 


        受限 Sid 计数:         SeTakeOwnershipPrivilege

        访问掩码:        0
发表于 2012-9-17 10:41:58 | 显示全部楼层
stringregexp($str, ":\s*(\w+)[\s\S]*?:\s*([A-Za-z]+:\\[^\r\n]+)\b[\s\S]*?:\s*(\w+)[\s\S]+:\s*([\s\S]+?)\b\s*[^\s]+:\s*(\w+)", 4)


不知道这个行不,不行的话请帖长点!

评分

参与人数 1金钱 +60 收起 理由
502762378 + 60 谢谢关注

查看全部评分

发表于 2012-9-17 10:54:02 | 显示全部楼层
回复 1# 502762378
#include <Array.au3>
$file="D:\UserFile\Desktop\11111.txt"
$txt=FileRead($file)&@CRLF&"1234:"
MsgBox(0,0,$txt)
$array=StringRegExp($txt,'(?s)\d+:(.+?)(?=\d+:)',3)
_ArrayDisplay($array)

评分

参与人数 1金钱 +40 收起 理由
502762378 + 40 谢谢关注

查看全部评分

 楼主| 发表于 2012-9-17 11:15:45 | 显示全部楼层
回复 2# drunk


   可能我举得例子有问题,谢谢您的热心,更新了下数据,希望可以继续得到您的帮助
 楼主| 发表于 2012-9-17 11:17:20 | 显示全部楼层
回复 3# love5173


    是我例子的问题,已重新上传,谢谢关注,好久没见你在提问区溜达了
发表于 2012-9-17 12:12:57 | 显示全部楼层
回复 5# 502762378
#include <Array.au3>
$file="D:\UserFile\Desktop\11111.txt"
$txt=FileRead($file)&@CRLF&"一:"
MsgBox(0,0,$txt)
$array=StringRegExp($txt,'(?s)[一-龥]+\s*\w*:(.+?)(?=[一-龥]+)',3)
_ArrayDisplay($array)
因为这种匹配有局限性,你给的匹配是没问题的,就怕有特殊情况。如果有可以给我留言 我继续改进
 楼主| 发表于 2012-9-17 12:40:59 | 显示全部楼层
回复 6# love5173


    搞定,many thanks
发表于 2012-9-17 13:15:45 | 显示全部楼层
哈,等我想出方法,已经解决了。看来我花的时间太长了。
#include <Array.au3>
$file=@ScriptDir & "\test.txt"
$txt=FileRead($file)&@CRLF&@CRLF
MsgBox(0,0,$txt)
$array=StringRegExp($txt,': {8}(.+\n.*\n)',3)
_ArrayDisplay($array)[

评分

参与人数 1金钱 +40 收起 理由
502762378 + 40 不好意思,你的代码非常完美

查看全部评分

 楼主| 发表于 2012-9-17 16:18:28 | 显示全部楼层
回复 6# love5173


    测试出个BUG,当我提供的数据中第七行中路径名称出现空格时,将得不到完整路径
发表于 2012-9-18 16:51:17 | 显示全部楼层
回复 9# 502762378
我不知道你说的空格是什么意思,我自己加了空格也没什么不妥
你最好能把出问题的那段文字发一份看看
说实话这正则写成这样就是因为你的那段要求有换行的部分造成的,要不能简单的多

评分

参与人数 1金钱 +40 收起 理由
502762378 + 40 感谢您的一如既往

查看全部评分

 楼主| 发表于 2012-9-18 18:59:37 | 显示全部楼层
回复 10# love5173
打开的对象:

        对象服务器:        Security

        对象类型:        File

        对象名称:        C:\LOREN\复件 复件 复件 456.txt

        句柄 ID:        1956

        操作 ID:        {0,486852256}

        进程 ID:        3388

        图像文件名:        C:\WINDOWS\explorer.exe

        主要用户名:        E000923

        主要域:        XXXX-WH

        主要登录 ID:        (0x0,0x278363)

        客户端用户名:        E000923

        客户端域:        XXXX-WH

        客户端登录 ID:        (0x0,0x278363)

        访问次数:        (0x0,0x278363)

        特权:        WRITE_OWNER 
                                 READ_CONTROL
                                 ReadData (或 ListDirectory) 
                                 ReadEA
                        

        受限 Sid 计数:         SeTakeOwnershipPrivilege

        访问掩码:        0
比如说这个,你的正则对象名称只能得到“C:\LOREN”,而特权也不会得到全部,真的非常感激。
发表于 2012-9-18 19:49:05 | 显示全部楼层
回复 11# 502762378

好吧 我说了 我写的东西很多都是针对情况来的,尽量简化了代码
这样就没什么问题了
#include <Array.au3>
$file="D:\UserFile\Desktop\11111.txt"
$txt=FileRead($file)&@CRLF&"一:"
MsgBox(0,0,$txt)
$array=StringRegExp($txt,'(?s)[一-龥]+\s*\w*?:(.+?)(?=[一-龥]+\s*\w*?:)',3)
_ArrayDisplay($array)

评分

参与人数 1金钱 +40 收起 理由
502762378 + 40

查看全部评分

 楼主| 发表于 2012-9-20 17:24:56 | 显示全部楼层
回复 12# love5173


    实在是不好意思,但是还是要说一下,得到的文件路径没有空格。。
发表于 2012-9-22 13:10:38 | 显示全部楼层
没试过我的代码吗?我的代码可没这个问题啊。伤心¥%#@!……
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-14 19:18 , Processed in 0.084720 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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