请教各位一个正则算法[已解决]
本帖最后由 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 stringregexp($str, ":\s*(\w+)[\s\S]*?:\s*(+:\\[^\r\n]+)\b[\s\S]*?:\s*(\w+)[\s\S]+:\s*([\s\S]+?)\b\s*[^\s]+:\s*(\w+)", 4)
不知道这个行不,不行的话请帖长点! 回复 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) 回复 2# drunk
可能我举得例子有问题,谢谢您的热心,更新了下数据,希望可以继续得到您的帮助 回复 3# love5173
是我例子的问题,已重新上传,谢谢关注,好久没见你在提问区溜达了 回复 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)因为这种匹配有局限性,你给的匹配是没问题的,就怕有特殊情况。如果有可以给我留言 我继续改进 回复 6# love5173
搞定,many thanks 哈,等我想出方法,已经解决了。看来我花的时间太长了。#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)[ 回复 6# love5173
测试出个BUG,当我提供的数据中第七行中路径名称出现空格时,将得不到完整路径 回复 9# 502762378
我不知道你说的空格是什么意思,我自己加了空格也没什么不妥
你最好能把出问题的那段文字发一份看看
说实话这正则写成这样就是因为你的那段要求有换行的部分造成的,要不能简单的多 回复 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”,而特权也不会得到全部,真的非常感激。 回复 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) 回复 12# love5173
实在是不好意思,但是还是要说一下,得到的文件路径没有空格。。 没试过我的代码吗?我的代码可没这个问题啊。伤心¥%#@!……
页:
[1]