找回密码
 加入
搜索
查看: 4449|回复: 12

请教个正则提取TXT文本内任意字符的问题

  [复制链接]
发表于 2009-12-29 23:08:02 | 显示全部楼层 |阅读模式
本帖最后由 zz999 于 2009-12-30 12:47 编辑

C:   1:1   A   (发生 发)   (10226)     (6242)
上面3个括号中的字符正则怎么提取
尤其是第一个括号里的,可能是任意字符,可能可空格!


C:   1:1   A   (发生 发)   (10226)     (6242)
本身不含有空格
原来是这样子的
C:   1:1   A   发生 发   10226    6242
发表于 2009-12-30 08:30:13 | 显示全部楼层
$s = "C:   1:1   A   (发生 发)   (10226)     (6242)"
;$r = "\(.*?\)";含()
$r = "\((.*?)\)";不含()
$array = StringRegExp($s, $r, 3)

for $i = 0 to UBound($array) - 1
    msgbox(0, "RegExp Test with Option 3 - " & $i, $array[$i])
Next

评分

参与人数 2金钱 +20 收起 理由
zz999 + 10 谢谢你,厉害!
afan + 10

查看全部评分

发表于 2009-12-30 11:56:22 | 显示全部楼层
本帖最后由 afan 于 2009-12-30 11:58 编辑

回复 2# smartzbs


    联系到楼主的另一贴,他的意思源字符串应该是不带括号的,因此貌似没有办法。只能从获取此段字符串的源头处理。
在楼主的另一贴我提出过此问题,不过楼主未理睬。http://www.autoitx.com/forum.php ... d=7644923#pid119690 9楼

评分

参与人数 1金钱 +10 收起 理由
zz999 + 10 对不起,没注意,SORRY,谢谢你的帮忙

查看全部评分

 楼主| 发表于 2009-12-30 15:41:19 | 显示全部楼层
回复 3# afan

问过好几位高手,都没能解决
不知道是不是就无法用正则了,还是有其他方法!
发表于 2009-12-30 15:43:30 | 显示全部楼层
本帖最后由 smartzbs 于 2009-12-30 15:50 编辑

哦,看了楼主传来的.txt文件,字符分隔是<tab>键,楼主你没表达出前三项也要,那就很简单了.
$s = "";从你自己的文本中读一行出来,在这贴文字会使<tab>键丢失
;$r = "(.*?)(?: *\t|$)";简单正则,最后一个元素略去即可,如For $i = 0 to UBound($array) - 2
$r = "(.*?)(?:(?: *\t)|(?: +$))";稍好一些正则,避免最后一个空元素
$array = StringRegExp($s, $r, 3)

For $i = 0 to UBound($array) - 1
    Msgbox(0, "", $array[$i])
Next

评分

参与人数 1金钱 +20 收起 理由
zz999 + 20 十分的感谢!

查看全部评分

发表于 2009-12-30 17:03:13 | 显示全部楼层
回复 5# smartzbs


    猜到肯定是@TAB这种情况…… 追问了LZ几次源头,就是不说,没办法~
发表于 2009-12-30 17:04:42 | 显示全部楼层
回复 4# zz999


    你都不说源头……
 楼主| 发表于 2009-12-31 15:42:55 | 显示全部楼层
本帖最后由 zz999 于 2009-12-31 15:47 编辑

回复 7# afan

我给出TXT在附件里的
因为下载要钱
没人下.我就直接复制出来的!


本帖子中包含更多资源

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

×
发表于 2009-12-31 15:45:47 | 显示全部楼层
回复 8# zz999


    我是指如何获取的……
 楼主| 发表于 2009-12-31 15:52:44 | 显示全部楼层
回复 9# afan


http://www.rayfile.com/files/622 ... -8724-0014221b798a/

我把东西打包发在网盘里了
麻烦您看一下!看有什么好办法
前三项我是用的   StringMid   获取的
后面不会了
考虑分区标签可能多种多样!
发表于 2009-12-31 16:49:00 | 显示全部楼层
本帖最后由 afan 于 2009-12-31 18:24 编辑

回复 10# zz999
#include <Array.au3>

$str = FileRead('1.txt')
$array = StringRegExp($str, '[\n|\t]([^\n\t]+)', 3)
If Not @Error Then _ArrayDisplay($array, '')

评分

参与人数 1金钱 +20 收起 理由
zz999 + 20 非常感谢!

查看全部评分

发表于 2009-12-31 18:22:08 | 显示全部楼层
本帖最后由 afan 于 2009-12-31 19:10 编辑
$str = FileRead('1.txt')
$array = StringRegExp($str, '[\n|\t]([^\n\t]+)', 3)
If @error Then Exit
For $i = 1 To UBound($array) - 3 Step 6
        MsgBox(0, 0, _
                        'Drive:' & $array[$i] & @CRLF & _
                        'No.:' & $array[$i + 1] & @CRLF & _
                        'Active:' & $array[$i + 2] & @CRLF & _
                        'VolumeLabe:' & $array[$i + 3] & @CRLF & _
                        'Total (Mb):' & $array[$i + 4] & @CRLF & _
                        'Free (Mb):' & $array[$i + 5])
Next
下面是完整的载入列表例子~
#include <GuiListView.au3>

$Form1 = GUICreate("测试", 400, 200)
$ListView1 = GUICtrlCreateListView('Drive|No.|Active|VolumeLabe|Total (Mb)|Free (Mb)', 5, 5, 390, 150)
$BtSx = GUICtrlCreateButton('刷新/载入', 200, 165, 90, 25)
$BtExit = GUICtrlCreateButton('退出', 300, 165, 90, 25)
GUISetState()

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case -3, $BtExit
                        Exit
                Case $BtSx
                        _GUICtrlListView_DeleteAllItems($ListView1)
                        ld('1.txt')
        EndSwitch
WEnd

Func ld($iFile)
        Local $array = StringRegExp(FileRead($iFile), '[\n|\t]([^\n\t]+)', 3), $i, $dt
        If @error Then Return MsgBox(48, 0, '错误')
        For $i = 1 To UBound($array) - 3 Step 6
                $dt = $array[$i] & '|' & $array[$i + 1] & '|' & $array[$i + 2] & '|' & $array[$i + 3] & '|' & $array[$i + 4] & '|' & $array[$i + 5]
                GUICtrlCreateListViewItem($dt, $ListView1)
        Next
EndFunc   ;==>ld

本帖子中包含更多资源

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

×
发表于 2009-12-31 19:04:11 | 显示全部楼层
不用正则的方法,
给我这样的菜鸟:

$txt = ""
$i =  1
While 1
$line = FileReadLine ("diskinfo.txt",$i)
If @error = -1 Then ExitLoop
$i+=1
If StringMid ($line,2,1) = ":" Then        $txt = $txt & StringReplace(StringReplace(StringTrimLeft ($line, 10), " ", ""),@TAB,"|")&@CR
WEnd
MsgBox(0,0,$txt)


本帖子中包含更多资源

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

×

评分

参与人数 1金钱 +10 收起 理由
afan + 10

查看全部评分

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

本版积分规则

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

GMT+8, 2024-12-28 10:15 , Processed in 0.101306 second(s), 33 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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