正则表达式如何找出多行匹配的所有内容
假如有以下文本12 34 67
A DFFD 45
C 3455 FDF
A43 3434F
435 34344 4
3434 34
A 3434 434
C 434 DF
434 FD
A 434 F
343434 df
现在在以上文本里面,只要是以A和C开头且相邻的两行,就取出来,另存为一个文本,例如从上面文本中取出:
A DFFD 45
C 3455 FDF
A 3434 434
C 434 DF
我用了正则表达式,主要脚本如下:
$chars = FileRead($file2)
$TESTabc=StringRegExp($chars,"(A\s+).*\n( C\s+).*",2,1)
FileWrite($file3,$TESTabc)
但是发现只能匹配第一个。
进行多行匹配时,有什么办法可以把所有内容都找出来呢? Local $sText
$Text = '12 34 67' & @CRLF & _
'A DFFD 45' & @CRLF & _
'C 3455 FDF ' & @CRLF & _
'A43 3434F ' & @CRLF & _
'435 34344 4' & @CRLF & _
'3434 34' & @CRLF & _
'A 3434 434' & @CRLF & _
'C 434 DF' & @CRLF & _
'434 FD' & @CRLF & _
'A 434 F' & @CRLF & _
'343434 df'
MsgBox(0, '原字符串', $Text)
$sReg = StringRegExp($Text, 'A.+\nC.+', 3)
For $i = 0 To UBound($sReg) -1
$sText &= $sReg[$i] & @CRLF
Next
MsgBox(0, '匹配结果', $sText) 本帖最后由 nmgwddj 于 2010-4-8 10:54 编辑
#include <file.au3>
$i = _FileCountLines('text.txt')
For $o = 1 To $i
$text = FileReadLine("text.txt", $o)
$Sl = StringLeft($text, 1)
If $Sl = 'A' Then
$text2 = FileReadLine("text.txt", $o + 1)
$Sl2 = StringLeft($text2, 1)
If $Sl2 = 'C' Then MsgBox(0, '', $text & @CRLF & $text2)
EndIf
Next
修改好的 哦 我看错了。再给你写个 谢谢楼上加分,客气啦!主要是LZ的问题比较简单而已。
正则处理这类问题效率确实高! 想知道For $i = 0 To UBound($sReg) -1
这句话后边的"-1"是什么意思? 回复 6# nmgwddj
UBound
--------------------------------------------------------------------------------
返回数组维度的大小.
UBound ( 数组 [, 维度] )
参数
数组 要开始查询的数组变量.
维度 [可选参数] 需要报告多维数组的哪个指定维度的大小.默认值为 1,表示第一维.若此参数为0,则返回数组的下标数(维数).
返回值
成功: 返回数组各维的大小.
失败: 返回值为0,并把 @error 设为下列数值之一:
1 = 给定的"数组"并非数组.
2 = 数组维度无效.
注意/说明
记住,UBound 返回的数值比数组最后一个元素的下标大1. :face (22):原来还能拿到括号外边来用UBound ( 数组 [, 维度] ) 回复 8# nmgwddj
看来你还是没弄懂
UBound($sReg) -1 是数组的实际大小
你这样试试就明白了MsgBox(0, '数组大小', UBound($sReg) -1 ) 回复 9# 水木子
难道是减“1”
不是负“1”
??? 明白了明白了。多谢 从没有用过UBound
以后用到一定避免此问题 明白了明白了。多谢 从没有用过UBound
以后用到一定避免此问题
nmgwddj 发表于 2010-4-8 12:35 http://www.autoitx.com/images/common/back.gif
估计你理解成 step 了 回复 12# afan
恩。你简直太会了解人了 是WOMANE吗??是的话给我做老婆吧 太理解人了:face (26): 本帖最后由 afan 于 2010-4-8 12:40 编辑
回复afan
恩。你简直太会了解人了 是WOMANE吗??是的话给我做老婆吧 太理解人了
nmgwddj 发表于 2010-4-8 12:38 http://www.autoitx.com/images/common/back.gif
纯爷们,还是老爷们…… 你都知道我的扣扣是6位…… 多Old啊 又是6位QQ,别提啦!伤心!:face (36):
页:
[1]
2