jchang 发表于 2010-4-10 11:51:59

正则表达式提示出错问题请教

本帖最后由 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:10:43

本帖最后由 nmgwddj 于 2010-4-10 12:13 编辑

固定行数吗:face (37):固定行数我就帮你搞定:face (23):
嘿嘿。开个玩笑。
如果我没想错的话。你正则前边应该加个.+\n
我不会 瞎说的 等高手来

afan 发表于 2010-4-10 13:48:40

#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:55:35

本帖最后由 水木子 于 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    ;这一行应该也算吧?

不知道是不是我理解错了。

afan 发表于 2010-4-10 13:57:44

回复 4# 水木子


    按他的意思,是要纯数字串,不带字母打隔壁的 :face (32):

水木子 发表于 2010-4-10 13:59:50

本帖最后由 水木子 于 2010-4-10 14:01 编辑

哦!那是我理解错了,我以为是匹配以数字开头的行。
所以我写的匹配结果中有这一行   3D MAX INTENSITY:      103640.4@NODE389

谢谢前辈指教,学习啦!:face (20):

jchang 发表于 2010-4-10 14:21:02

多谢各位啦,收益匪浅

jchang 发表于 2010-4-10 18:54:50

请问如何写入文本呢?

水木子 发表于 2010-4-10 22:30:40

这还不简单 FileWrite

waxy 发表于 2010-4-12 10:01:17

有点看不懂。
页: [1]
查看完整版本: 正则表达式提示出错问题请教