sunkiss 发表于 2010-5-17 17:30:22

学习正则!处理minitow生成的磁盘分区列表!

本帖最后由 sunkiss 于 2010-5-18 08:38 编辑

这几天我在努力自学AU3,遇到的问题是多多啊!在你的帮助下,dsptw.exe分区的操作大体上明白了,可是正则这个东西没有理解,我就想试着自己学习!我用minitow.exe /nohp /ifs /p > diskinfo.txt生成了个分区的列表想用正则提取活动分区所在的dos盘符、windows下的盘符还有ghost对应的分区编号,失败了!因为这个不是制表符的!我想提取1:1那也行的1:1 d: c:合同2:1行的2:1、h失败了!还得请教!

N:N    DOS WIN PRI/LOG ACT HIDE ID FILE SYSTEMLABEL       TOTALmb FREEmb
1:1= D:C:PRIMARY YES NO   07 NTFS/HPFS                49010   29634
1:2= C:F:LOGICAL NONO   0B FAT32                  996   195   
1:3= E:D:LOGICAL NONO   07 NTFS/HPFS                1000068112   
1:4= F:E:LOGICAL NONO   07 NTFS/HPFS                10523031555
1:5= G:      PRIMARY NONO   83 Linux Native             48971   0      
1:6            PRIMARY NONO   82 Linux Swap               1027    0      
2:1= H:      PRIMARY YES NO   83 Linux Native             52454   0      
2:2            PRIMARY NONO   82 Linux Swap               4096    0      
2:3= I:I:PRIMARY NONO   07 NTFS/HPFS                10240071377
2:4= J:J:PRIMARY NONO   07 NTFS/HPFS                31798956649

afan 发表于 2010-5-17 18:59:56

#include <Array.au3>
$Str = FileRead('hdmini.txt')
$sR = StringRegExp($str, '\h*(\d:\d+)\h+\=\h(:)\h+(?:?)\h+PRIMARY YES', 3)
_ArrayDisplay($sR, '')p.s, 改下标题先,这样不利于搜索

sunkiss 发表于 2010-5-18 08:52:01

本帖最后由 sunkiss 于 2010-5-18 09:06 编辑

这个正则真难理解!不过\h*(\d:\d+)我已经知道了!在我这里(\d:\d+)匹配的就是数字?:?这个磁盘编号!
这里面的\h是空格,后面的+是最大可能的匹配!我的理解在这里就是匹配个空格或者有多个空格都匹配,\=是匹配一个等于号吧!\h(:)这里就是匹配一个空格接着匹配盘符,\h+(?:?)这里因为上个匹配完后有个空格,所以要\h+,(?:?)里面的?:?是最小匹配还是别的?不懂了。\h+PRIMARY YES这里\h+PRIMARY后面为什么不再\h+呢?最后这里改成\h+PRIMARY\h+YES也是可以的!!改成$sR = StringRegExp($str, '\h*(\d:\d+)\h+\=\h(:)\h+(?:?) PRIMARY YES', 3)也可以我都试过了!还要请老师教教我啊!

sunkiss 发表于 2010-5-18 09:00:18

本帖最后由 sunkiss 于 2010-5-18 09:08 编辑

将dos下边的d:改成两个空格之后第一行的1:1和C:就不显示了!试着改了改不行,或者不要DOS下边的盘符只要ACT下边是YES的那几行的N:N和WIN

3mile 发表于 2010-5-19 09:47:39

如果只是要行的话,应该很简单:#include <Array.au3>
$Str = FileRead('hdmini.txt')
$sR = StringRegExp($str, '.+YES', 3)
_ArrayDisplay($sR, '')

3mile 发表于 2010-5-19 09:51:06

#include <Array.au3>
$Str = FileRead('hdmini.txt')
$sR = StringRegExp($str, '(\d:\d+).+YES', 3)
_ArrayDisplay($sR, '')

lanfengc 发表于 2010-5-19 12:12:00

那个.+也可修改成.*
页: [1]
查看完整版本: 学习正则!处理minitow生成的磁盘分区列表!