bhffhzh 发表于 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
这两行路径。

请问如何操作?谢谢各位。

shqf 发表于 2014-6-30 11:35:20

基本的正则:“目录:(.+)的权限”

bhffhzh 发表于 2014-6-30 12:26:46

能否说详细些。能有例子就好了。

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

bhffhzh 发表于 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程序读取记事本文档内容,然后,通过程序处理后,只留下有问题权限的路径,重新生成一个新的记事本。

kevinch 发表于 2014-7-3 08:30:16

(?is)(?:目录:)(\:.*?)(?=的权限)这样试下呢

shqf 发表于 2014-7-3 08:52:07

告诉你的几种方法应该都行。楼主是否都没试过?完全照拿当然不行,告诉的是解决问题的核心方法。其他需要自己结合实际情况增改代码的呀。
难道楼主是不知把文件的内容读到时字符串变量里?抑或不知把替换过的字符串再写入文件?

bhffhzh 发表于 2014-7-3 09:36:52

这样试下呢
kevinch 发表于 2014-7-3 08:30 http://www.autoitx.com/images/common/back.gif


成反结果了。

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

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



已经解决。感谢火龙兄弟的指出。

winple 发表于 2014-7-7 21:48:20

又学到了好东西

zxhou1 发表于 2014-7-23 15:14:32

本帖最后由 zxhou1 于 2014-7-23 15:39 编辑

{:face (197):} {:face (411):}

ak47gglllk 发表于 2014-9-12 11:34:30

额,学习,学习,学习。感谢,感谢,再次感谢

chron 发表于 2015-3-26 17:42:06

根据坛友的帮助例子修改成功,谢谢。

gwgelin 发表于 2015-4-12 01:03:04

感谢楼主的分享,谢谢
页: [1]
查看完整版本: [已解决]关于读取文本后筛选里面关键字符的问题