找回密码
 加入
搜索
查看: 3088|回复: 7

[AU3基础] [已解决]不知能否用正则提取这段内容

  [复制链接]
发表于 2010-9-25 19:39:21 | 显示全部楼层 |阅读模式
本帖最后由 xlcwxl 于 2010-9-25 21:18 编辑

查看7z文件中包含的文件和文件夹,用命令可以得到
7-Zip 4.65  Copyright (c) 1999-2009 Igor Pavlov  2009-02-03

列举压缩文件: Soft.7z

算法 = LZMA BCJ2
固实文件 = +
模块数 = 2
物理大小 = 1938946
头部大小 = 276

   日期      时间          属性          源文件          压缩后  Name
------------------- ----- ------------ ------------  ------------------------
2010-02-09 15:37:17 ....A       659116       242830  Test.exe
2009-08-17 20:48:39 ....A      1685311      1695840  文件夹1\文件夹2\Test.exe
2009-08-17 20:48:39 ....A      1685311               文件夹1\Test.exe
2010-02-19 20:18:48 D....            0            0  文件夹1\文件夹2
2010-02-19 20:18:55 D....            0            0  文件夹1
------------------- ----- ------------ ------------  ------------------------
                               4029738      1938670  3 文件数, 2 文件夹数
想要的结果1:

Test.exe
文件夹1\文件夹2\Test.exe
文件夹1\Test.exe


想要的结果2:

文件夹1\文件夹2
文件夹1

目录和可执行文件分开,不知能否用正则实现?谢谢!

评分

参与人数 1金钱 +10 收起 理由
afan + 10 感谢主动将修改帖子分类为[已解决],请继续 ...

查看全部评分

发表于 2010-9-25 20:50:04 | 显示全部楼层
$Str = _
                '7-Zip 4.65  Copyright (c) 1999-2009 Igor Pavlov  2009-02-03' & @CRLF & _
                '' & @CRLF & _
                '列举压缩文件: Soft.7z' & @CRLF & _
                '' & @CRLF & _
                '算法 = LZMA BCJ2' & @CRLF & _
                '固实文件 = +' & @CRLF & _
                '模块数 = 2' & @CRLF & _
                '物理大小 = 1938946' & @CRLF & _
                '头部大小 = 276' & @CRLF & _
                '' & @CRLF & _
                '   日期      时间          属性          源文件          压缩后  Name' & @CRLF & _
                '------------------- ----- ------------ ------------  ------------------------' & @CRLF & _
                '2010-02-09 15:37:17 ....A       659116       242830  Test.exe' & @CRLF & _
                '2009-08-17 20:48:39 ....A      1685311      1695840  文件夹1\文件夹2\Test.exe' & @CRLF & _
                '2009-08-17 20:48:39 ....A      1685311               文件夹1\Test.exe' & @CRLF & _
                '2010-02-19 20:18:48 D....            0            0  文件夹1\文件夹2' & @CRLF & _
                '2010-02-19 20:18:55 D....            0            0  文件夹1' & @CRLF & _
                '------------------- ----- ------------ ------------  ------------------------' & @CRLF & _
                '                               4029738      1938670  3 文件数, 2 文件夹数'
Msgbox(0, '原字符串', $str)

$sR = StringRegExp($str, '(?<=\.{4}A|D\.{4})(?:\h+\d*){2}\h+(.+)', 3)
#include <Array.au3>
_ArrayDisplay($sR, UBound($sR))
发表于 2010-9-25 20:55:04 | 显示全部楼层
要分别输出结果也行
$Str = _
                '7-Zip 4.65  Copyright (c) 1999-2009 Igor Pavlov  2009-02-03' & @CRLF & _
                '' & @CRLF & _
                '列举压缩文件: Soft.7z' & @CRLF & _
                '' & @CRLF & _
                '算法 = LZMA BCJ2' & @CRLF & _
                '固实文件 = +' & @CRLF & _
                '模块数 = 2' & @CRLF & _
                '物理大小 = 1938946' & @CRLF & _
                '头部大小 = 276' & @CRLF & _
                '' & @CRLF & _
                '   日期      时间          属性          源文件          压缩后  Name' & @CRLF & _
                '------------------- ----- ------------ ------------  ------------------------' & @CRLF & _
                '2010-02-09 15:37:17 ....A       659116       242830  Test.exe' & @CRLF & _
                '2009-08-17 20:48:39 ....A      1685311      1695840  文件夹1\文件夹2\Test.exe' & @CRLF & _
                '2009-08-17 20:48:39 ....A      1685311               文件夹1\Test.exe' & @CRLF & _
                '2010-02-19 20:18:48 D....            0            0  文件夹1\文件夹2' & @CRLF & _
                '2010-02-19 20:18:55 D....            0            0  文件夹1' & @CRLF & _
                '------------------- ----- ------------ ------------  ------------------------' & @CRLF & _
                '                               4029738      1938670  3 文件数, 2 文件夹数'

#include <Array.au3>

$sR = StringRegExp($str, '(?<=\.{4}A)(?:\h+\d*){2}\h+(.+)', 3)
_ArrayDisplay($sR, '想要的结果1')

$sR = StringRegExp($str, '(?<=D\.{4})(?:\h+\d*){2}\h+(.+)', 3)
_ArrayDisplay($sR, '想要的结果2')

评分

参与人数 1金钱 +10 收起 理由
xlcwxl + 10 谢谢帮忙

查看全部评分

发表于 2010-9-25 21:04:16 | 显示全部楼层
回复 1# xlcwxl
#include <array.au3>
$Str = _
' 7-Zip65  Copyright (c) 1999-2009 Igor Pavlov  2009-02-03' & @CRLF & _
'' & @CRLF & _
'' & @CRLF & _
' 列举压缩文件: Soft.7z' & @CRLF & _
'' & @CRLF & _
'' & @CRLF & _
' 算法 = LZMA BCJ2' & @CRLF & _
' 固实文件 = +' & @CRLF & _
' 模块数 = 2' & @CRLF & _
' 物理大小 = 1938946' & @CRLF & _
' 头部大小 = 276' & @CRLF & _
'' & @CRLF & _
'' & @CRLF & _
'    日期      时间          属性          源文件          压缩后  Name' & @CRLF & _
' ------------------- ----- ------------ ------------  ------------------------' & @CRLF & _
' 2010-02-09 15:37:17 ....A       659116       242830  Test.exe' & @CRLF & _
' 2009-08-17 20:48:39 ....A      1685311      1695840  文件夹1\文件夹2\Test.exe' & @CRLF & _
' 2009-08-17 20:48:39 ....A      1685311               文件夹1\Test.exe' & @CRLF & _
' 2010-02-19 20:18:48 D....            0            0  文件夹1\文件夹2' & @CRLF & _
' 2010-02-19 20:18:55 D....            0            0  文件夹1' & @CRLF & _
' ------------------- ----- ------------ ------------  ------------------------' & @CRLF & _
'                                4029738      1938670  3 文件数, 2 文件夹数' & @CRLF & _
'' & @CRLF & _
'复制代码' & @CRLF & _
''
$Resutl=StringRegExp($Str,'\d{4}-\d{2}-\d{2}\h\d{2}:\d{2}:\d{2}.*\h(\D.*)',3)
_ArrayDisplay($Resutl)

评分

参与人数 2金钱 +30 收起 理由
xlcwxl + 10 谢谢帮忙
afan + 20

查看全部评分

发表于 2010-9-25 21:09:23 | 显示全部楼层
回复 3# afan
碰车了,不好意思,没刷新页面
发表于 2010-9-25 21:20:53 | 显示全部楼层
回复 5# 3mile


    热心不怕多,呵呵~

p.s, '\d{4}-\d{2}-\d{2}\h\d{2}:\d{2}:\d{2}.*\h(\D.*)' 可能会对数字开头的文件或文件夹多捕捉个前面的空格
 楼主| 发表于 2010-9-25 21:27:40 | 显示全部楼层
回复 6# afan

非常感谢楼上两位的热心帮忙,正则真是强大,这样的都能完整提取出来,谢谢!
发表于 2010-9-25 21:43:40 | 显示全部楼层
我也来一个,借用afan版主的代码
#include <Array.au3>

RunWait(@ComSpec & ' /c "C:\Program Files\7-Zip\7z.exe" l soft.7z>%temp%\a.txt', "", @SW_HIDE)
$Str = FileRead(FileOpen(@TempDir & "\a.txt"))

$sR = StringRegExp($str, '(?<=\.{4}A)(?:\h+\d*){2}\h+(.+)', 3)
_ArrayDisplay($sR, '想要的结果1')

$sR = StringRegExp($str, '(?<=D\.{4})(?:\h+\d*){2}\h+(.+)', 3)
_ArrayDisplay($sR, '想要的结果2')

FileDelete(@TempDir & "\a.txt")

评分

参与人数 1金钱 +10 收起 理由
xlcwxl + 10 赞一个

查看全部评分

您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-10-3 06:30 , Processed in 0.088579 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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