kevinch 发表于 2011-4-16 13:11:29

au3的正则匹配支持submatches吗?(决定采用自定义函数的方式) - 【已解决】

本帖最后由 kevinch 于 2011-4-17 13:05 编辑

在vbs正则里有submatches用法,对于无法单独提取的字符串可以提取一段然后再提取其子段,不知道au3是否也可以这样使用,能给个小例子吗?{:face (396):}

mozha 发表于 2011-4-16 14:07:59

本帖最后由 mozha 于 2011-4-16 14:09 编辑

FileReadLine$file = FileOpen("test.txt", 0)

; 检查打开的文件是否可读
If $file = -1 Then
    MsgBox(0, "错误", "不能打开文件.")
    Exit
EndIf

; 每次读取一行文本,直到文件结束.
While 1
    $line = FileReadLine($file)
    If @error = -1 Then ExitLoop
    MsgBox(0, "读取的行:", $line)
Wend

FileClose($file)

love5173 发表于 2011-4-16 14:14:26

回复 1# kevinch
给段字符串看看,不是很懂你的意思,我暂时没遇到不可正则提取的例子

kevinch 发表于 2011-4-16 14:31:54

比如:25个人每人60块,50个人每人70块如果这种在vbs正则里可以直接用"(\d+).*?(\d+)"匹配,并用submatches(0)匹配提取出第一个数字,submatches(1)匹配提取出第二个数字,从而实现计算功能,不知au3能否类似这样实现?

love5173 发表于 2011-4-16 16:53:48

通配你需要的数字,得到的数组不就是你要的?比如提取70跟60,可以(\d+)块   这样得到的数组不是你要计算的?

love5173 发表于 2011-4-16 16:56:50

#include <array.au3>
$a='25个人每人60块,50个人每人70块'
$b=StringRegExp($a,'(\d+)块',3)
_ArrayDisplay($b)

kevinch 发表于 2011-4-16 17:13:18

回复 5# love5173
主要是这个功能不错,不知道au3支持这个功能不

大绯狼 发表于 2011-4-16 17:20:53

这个是捕获组 请参考相关的函数

lixiaolong 发表于 2011-4-16 19:18:48

本帖最后由 lixiaolong 于 2011-4-16 20:39 编辑

回复 4# kevinch

写个用户定义函数不行吗?
$str = '25个人每人60块,50个人每人70块'

$a = _StringRegExp_SubMatches($str, '(\d+).*?(\d+)', 0)
MsgBox(0, '', $a)

Func _StringRegExp_SubMatches($string, $regex, $num)
        $out = StringRegExp($string, $regex, 3)
        Return $out[$num]
EndFunc   ;==>_StringRegExp_SubMatches

easefull 发表于 2011-4-17 07:35:48

看看是这效果不;Perl样式
#include <Array.au3>
Local $sText    = '25个人每人60块,50个人每人70块'
Local $asResult = StringRegExp($sText, '(\d+).*?(\d+)', 4)

If IsArray($asResult) Then
        Local $iCount = UBound($asResult, 1)
        For $i = 0 To $iCount - 1 Step 1
                _ArrayDisplay($asResult, "第 " & $i+1 &" 条结果:")
        Next
Else
        Local $iCount = 0
EndIf

$sTips = "发现 " & $iCount & " 条结果:"
For $i = 0 To $iCount - 1 Step 1
        $aTmp   = $asResult[$i]
        $sTips &= @CRLF & $i + 1 & @TAB & $aTmp & @TAB & "合计 = " & $aTmp * $aTmp & " 元"
Next
MsgBox(4096, "结果", $sTips)
Exit;AutoIt返回样式
#include <Array.au3>
Local $sText    = '25个人每人60块,50个人每人70块'
Local $asResult = StringRegExp($sText, '((\d+).*?(\d+))', 3)

If IsArray($asResult) Then
        Local $iCount = UBound($asResult, 1) / 3
        _ArrayDisplay($asResult, "发现 " & $iCount & " 条结果:")
Else
        Local $iCount = 0
EndIf

$sTips = "发现 " & $iCount & " 条结果:"
For $i = 0 To $iCount - 1 Step 1
        $sTips &= @CRLF & $i + 1 & @TAB & $asResult & @TAB & "合计 = " & $asResult * $asResult & " 元"
Next
MsgBox(4096, "结果", $sTips)
Exit
页: [1]
查看完整版本: au3的正则匹配支持submatches吗?(决定采用自定义函数的方式) - 【已解决】