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

[效率算法] [已解决]关于读取文本后筛选里面关键字符的问题

 火.. [复制链接]
发表于 2014-6-30 11:02:44 | 显示全部楼层 |阅读模式
本帖最后由 bhffhzh 于 2014-7-3 10:18 编辑

星外权限扫描工具扫描出来后会生成一个记事本文档。里面有一些类似这样的一些字符:



2014/6/23 23:17:25,扫描完成,如果下面的结果列出了可能有问题的目录请联系星外的售后支持解决.
2014/6/23 23:15:57,目录:C:\Windows\Temp的权限有问题,有可能造成入侵!
2014/6/23 23:15:58,目录:C:\Windows\Tasks的权限有问题,有可能造成入侵!

我想用AU3对这文本进行如下步骤的操作:
1、读取这文本的内容,去掉第一行。
2、对c:前面的内容去掉。  
3、去掉“的权限有问题,有可能造成入侵!”

即只留下
C:\Windows\Temp
C:\Windows\Tasks
这两行路径。

请问如何操作?谢谢各位。
发表于 2014-6-30 11:35:20 | 显示全部楼层
基本的正则:“目录:(.+)的权限”
 楼主| 发表于 2014-6-30 12:26:46 | 显示全部楼层
能否说详细些。能有例子就好了。
发表于 2014-6-30 12:43:12 | 显示全部楼层
Local $Str = _
                '2014/6/23 23:17:25,扫描完成,如果下面的结果列出了可能有问题的目录请联系星外的售后支持解决.' & @CRLF & _
                '2014/6/23 23:15:57,目录:C:\Windows\Temp的权限有问题,有可能造成入侵!' & @CRLF & _
                '2014/6/23 23:15:58,目录:C:\Windows\Tasks的权限有问题,有可能造成入侵!'
Local $sRE = StringRegExpReplace($str, '(?m)^.+?\.\v+|^\d.+?:(?=\w:\V+?)|的权限(?:(?<!权).)+?!(?=\v+|$)', '')
MsgBox(0, '替换结果', $sRE)
 楼主| 发表于 2014-7-2 21:36:11 | 显示全部楼层
本帖最后由 bhffhzh 于 2014-7-2 21:41 编辑

2014/6/30 11:02:21,扫描完成,如果下面的结果列出了可能有问题的目录请联系星外的售后支持解决.
2014/6/30 11:01:04,目录:C:\Windows\Temp的权限有问题,有可能造成入侵!
2014/6/30 11:01:04,目录:C:\Windows\Tasks的权限有问题,有可能造成入侵!
2014/6/30 11:01:03,目录:C:\Windows\SysWOW64\Tasks\Microsoft\Windows\RemoteApp and Desktop Connections Update的权限有问题,有可能造成入侵!
2014/6/30 11:01:03,目录:C:\Windows\SysWOW64\Tasks\Microsoft\Windows\PLA\System的权限有问题,有可能造成入侵!
2014/6/30 11:01:03,目录:C:\Windows\SysWOW64\Tasks的权限有问题,有可能造成入侵!
2014/6/30 11:00:58,对路径“C:\Windows\System32\LogFiles\WMI\RtBackup”的访问被拒绝。
2014/6/30 11:00:24,指定的路径或文件名太长,或者两者都太长。完全限定文件名必须少于 260 个字符,并且目录名必须少于 248 个字符。
2014/6/30 11:00:31,目录:C:\Users\All Users\Microsoft\Crypto\DSS\MachineKeys的权限有问题,有可能造成入侵!
2014/6/30 10:59:09,方法失败,意外错误代码为 32。
2014/6/30 10:59:09 软件开始扫描C盘可疑的权限,扫描需要一小时或更长的时间,
扫描时软件可能没有响应,扫描完成后会有结果,请不要关闭软件.(软件版本为2011-6-9)

我想进一步改进一下:
     对上面红色的有权限问题的路径留下,其余的全部删除。那么
     
(?m)^.+?\.\v+|^\d.+?:(?=\w:\V+?)|的权限(?:(?<!权).)+?!(?=\v+|$)

     这个正则又如何改进呢,不好意思,正则实在是一头雾水。


我干脆上传了欲改进的文档吧,我的用意是用au3程序读取记事本文档内容,然后,通过程序处理后,只留下有问题权限的路径,重新生成一个新的记事本。

本帖子中包含更多资源

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

×
发表于 2014-7-3 08:30:16 | 显示全部楼层
(?is)(?:目录:)([a-z]\:.*?)(?=的权限)
这样试下呢
发表于 2014-7-3 08:52:07 | 显示全部楼层
告诉你的几种方法应该都行。楼主是否都没试过?完全照拿当然不行,告诉的是解决问题的核心方法。其他需要自己结合实际情况增改代码的呀。
难道楼主是不知把文件的内容读到时字符串变量里?抑或不知把替换过的字符串再写入文件?
 楼主| 发表于 2014-7-3 09:36:52 | 显示全部楼层
这样试下呢
kevinch 发表于 2014-7-3 08:30



成反结果了。
发表于 2014-7-3 10:14:24 | 显示全部楼层
#include <array.au3>
#include <file.au3>

Local $gg = FileOpen(@ScriptDir & "\text.txt")
Local $RF = FileRead($gg)
$a_Path = StringRegExp($RF, "(?<=目录:).*(?=的权限)", 3)
_ArrayDisplay($a_Path)

本帖子中包含更多资源

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

×
 楼主| 发表于 2014-7-3 10:17:42 | 显示全部楼层
#include <array.au3>
#include <file.au3>


Local $gg = FileOpen("d:\正则.txt")
Local $RF = FileRead($gg)
$a_Path = StringRegExp($RF, "(?<=目录:).*(?=的权限)", 3)
_ArrayDisplay($a_Path)




已经解决。感谢火龙兄弟的指出。
发表于 2014-7-7 21:48:20 | 显示全部楼层
又学到了好东西
发表于 2014-7-23 15:14:32 | 显示全部楼层
本帖最后由 zxhou1 于 2014-7-23 15:39 编辑

发表于 2014-9-12 11:34:30 | 显示全部楼层
额,学习,学习,学习。感谢,感谢,再次感谢
发表于 2015-3-26 17:42:06 | 显示全部楼层
根据坛友的帮助例子修改成功,谢谢。
发表于 2015-4-12 01:03:04 | 显示全部楼层
感谢楼主的分享,谢谢
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-16 16:21 , Processed in 0.083544 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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