回复 29# lixiaolong
首先,应该用.*而不是.+
$str='-423 s'
$Test_2 = StringRegExpReplace($str, "-?\d+\s+(.).+", "\1")
msgbox(0,$str,$Test_2)
if $Test_2 ='h' then MsgBox(0, '', ' h ok $Test_2= ' & $Test_2 ) ;
if $Test_2 ='p' then MsgBox(0, '', ' p ok $Test_2= ' & $Test_2 ) ;
其次,返回空值并不会影响后面的IF判断.
#include <Array.au3>
Local $Str = _
'11 23pphh =11 2 不是h 或p' & @CRLF & _
'22 p9944 =22 p' & @CRLF & _
'-33 sdfh77 = -33 s 不是h 或p' & @CRLF & _
'44dfghdfh = 放弃' & @CRLF & _
'55 = 放弃 (注: 即使55 的后面带空格也要放弃)' & @CRLF & _
'66pp66 ph = 放弃 空格前的字符必须是整数' & @CRLF & _
'-423 s'
MsgBox(0, '原字符串', $Str)
$Array = StringSplit($Str, @CRLF, 2 + 1)
For $i = 0 To UBound($Array) - 1
$Test_2 = Re_str($Array[$i])
Switch $Test_2
Case 'h'
MsgBox(0, $Array[$i], $Test_2 & ' ok $Test_2= ' & $Test_2) ;
Case 'p'
MsgBox(0, $Array[$i], $Test_2 & ' ok $Test_2= ' & $Test_2) ;
Case 's'
MsgBox(0, $Array[$i], $Test_2 & ' ok $Test_2= ' & $Test_2) ;
EndSwitch
Next
Func Re_str($String)
Return StringRegExpReplace($String, '(?(?=^[-]?\d+\h[phs])^[-]?\d+\h([phs])).*', '$1')
EndFunc ;==>Re_str
|