正则表达式提示出错问题请教
本帖最后由 jchang 于 2010-4-10 13:17 编辑从文本中提取出第一个是数字的行,例如文本:
HIGHEST STRESSES: ( KPa )
CODE STRESS %: 53.2@NODE760
STRESS: 49288.9ALLOWABLE: 92591.
3D MAX INTENSITY: 103640.4@NODE389
10 20022 8733 419 44962 1.00 1.00 28847 132302
190 19563 4315 365 45987 3.01 3.01 23645 132302
BENDING STRESS: 48710.7@NODE190
TORSIONAL STRESS: 4142.0@NODE 2199
AXIAL STRESS: 41473.2@NODE 4100
提取出如下两行:
10 20022 8733 419 44962 1.00 1.00 28847 132302
190 19563 4315 365 45987 3.01 3.01 23645 132302
我的脚本如下:
#include <File.au3>
#include<array.au3>
Global $x
If $cmdline = 1 Then
$x = $cmdline
EndIf
$file2 = FileOpen(FileGetLongName($x), 0)
If $file2 = -1 Then
MsgBox(0, "错误", "不能打开文件.")
Exit
EndIf
FileDelete(@ScriptDir & "\输出.txt")
$file3 = FileOpen(@ScriptDir & "\输出.txt", 2)
If $file3 = -1 Then
MsgBox(0, "错误", "不能打开文件.")
Exit
EndIf
While 1
$line2 = FileReadLine($file2)
If @error = -1 Then ExitLoop
$T = stringregexp($line2, '\s+\d{2,3,4}.*\n', 2,1)
If @errorThen
MsgBox(0,'',"提取出错")
Else
FileWriteLine($file3,$T)
EndIf
Wend
FileClose($file2)
FileClose($file3)
以上脚本在执行过程中为何屡屡弹出“提取出错”的对话框呢? 本帖最后由 nmgwddj 于 2010-4-10 12:13 编辑
固定行数吗:face (37):固定行数我就帮你搞定:face (23):
嘿嘿。开个玩笑。
如果我没想错的话。你正则前边应该加个.+\n
我不会 瞎说的 等高手来 #include <Array.au3>
$Str = _
'HIGHEST STRESSES: ( KPa ) ' & @CRLF & _
' CODE STRESS %: 53.2@NODE760 ' & @CRLF & _
' STRESS: 49288.9ALLOWABLE: 92591. ' & @CRLF & _
' 3D MAX INTENSITY: 103640.4@NODE389 ' & @CRLF & _
' ' & @CRLF & _
' 10 20022 8733 419 44962 1.00 1.00 28847 132302' & @CRLF & _
' 190 19563 4315 365 45987 3.01 3.01 23645 132302' & @CRLF & _
' ' & @CRLF & _
'BENDING STRESS: 48710.7@NODE190 ' & @CRLF & _
' TORSIONAL STRESS: 4142.0@NODE 2199 ' & @CRLF & _
' AXIAL STRESS: 41473.2@NODE 4100'
;Msgbox(0, '原字符串', $str)
$sR = StringRegExp($str, '\n(\h+\d+\s.+)', 3)
_ArrayDisplay($sR, '') 本帖最后由 水木子 于 2010-4-10 13:56 编辑
前辈确实厉害,匹配结果完全符合LZ的要求。
10 20022 8733 419 44962 1.00 1.00 28847 132302
190 19563 4315 365 45987 3.01 3.01 23645 132302
不过我一点疑问,从文本中提取出第一个是数字的行。
3D MAX INTENSITY: 103640.4@NODE389 ;这一行应该也算吧?
不知道是不是我理解错了。 回复 4# 水木子
按他的意思,是要纯数字串,不带字母打隔壁的 :face (32): 本帖最后由 水木子 于 2010-4-10 14:01 编辑
哦!那是我理解错了,我以为是匹配以数字开头的行。
所以我写的匹配结果中有这一行 3D MAX INTENSITY: 103640.4@NODE389
谢谢前辈指教,学习啦!:face (20): 多谢各位啦,收益匪浅 请问如何写入文本呢? 这还不简单 FileWrite 有点看不懂。
页:
[1]