(已解决)挑选正确的数字如何挑选(正则)
本帖最后由 shenrenba 于 2014-6-6 14:33 编辑挑出正确的数字如挑选以下代码 如果第一位为.则自动在.前加0 如果最后一位为点则删除. 我自己虽然写出来的 但是用了好几次正则加判断 有简单些的代码吗?Local $num = "4566.132.435" & @CRLF & "-4566.1-32.435" & @CRLF & "45661-32435" & @CRLF & ".4566132435" & @CRLF & "-4566132435." & @CRLF & "-45661.32435" & @CRLF & "-456a61.32435" & @CRLF & "4566132435"
本帖最后由 lixiaolong 于 2014-6-5 20:52 编辑
回复 1# shenrenba $Str = _
'4566.132.435' & @CRLF & _
'-4566.1-32.435' & @CRLF & _
'45661-32435' & @CRLF & _
'.4566132435' & @CRLF & _
'-4566132435.' & @CRLF & _
'-45661.32435' & @CRLF & _
'-456a61.32435' & @CRLF & _
'4566132435' & @CRLF & _
'' & @CRLF & _
''
Local $Test = StringRegExpReplace($Str, '(?m)^(\.)([^\.]+)\.$', '0\1\2')
MsgBox(0, 0, $Test)正则有点问题,需要修改。。。 替换两次$Str = _
'4566.132.435' & @CRLF & _
'-4566.1-32.435' & @CRLF & _
'45661-32435' & @CRLF & _
'.4566132435' & @CRLF & _
'-4566132435.' & @CRLF & _
'-45661.32435' & @CRLF & _
'-456a61.32435' & @CRLF & _
'4566132435'
$Test = StringRegExpReplace($Str, '(?m)^(\.)', '0\1')
$Test = StringRegExpReplace($Test, '(?m)\.$', '')
MsgBox(0, 0, $Test) 回复 3# lixiaolong
先谢谢你但你这并不是我想要的结果下面是我的代码我就是觉得写的比较麻烦
$Str = _
'4566.132.435' & @CRLF & _
'-4566.1-32.435' & @CRLF & _
'45661-32435' & @CRLF & _
'.4566132435' & @CRLF & _
'-.4566132435' & @CRLF & _
'-4566132435.' & @CRLF & _
'-45661.32435' & @CRLF & _
'-456a61.32435' & @CRLF & _
'4566132435'
Local $out
$Test = StringRegExp($Str, "([^\v|$]+)", 3)
For $i = 0 To UBound($Test) - 1
$sr = StringRegExp($Test[$i], '\-|\.', 3)
If @error Then
If StringRegExpReplace($Test[$i], "\d", "") = "" Then $out &= $Test[$i] & @CRLF
Else
If StringRegExpReplace($Test[$i], "\d|\.|\-", "") = "" Then
If UBound($sr) = 1 Then
If StringRight($Test[$i], 1) = "-" Then $out &= $Test[$i] & @CRLF
If StringLeft($Test[$i], 1) = "." Then $out &= "0" & $Test[$i] & @CRLF
If StringRight($Test[$i], 1) = "." Then $out &= StringTrimRight($Test[$i], 1) & @CRLF
ElseIf UBound($sr) = 2 Then
If (Not StringInStr($Test[$i], "-", 0, 2)) Or (Not StringInStr($Test[$i], ".", 0, 2)) Then
If StringLeft($Test[$i], 1) = "-" Then
If StringLeft($Test[$i], 2) = "-." Then
$out &= StringRegExpReplace($Test[$i], "\-", "\-0") & @CRLF
ElseIf StringRight($Test[$i], 1) = "." Then
$out &= StringTrimRight($Test[$i], 1) & @CRLF
Else
$out &= $Test[$i] & @CRLF
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
Next
MsgBox(0, 0, $out)
本帖最后由 shqf 于 2014-6-6 12:10 编辑
#include <Array.au3>
$Str = _
'4566.132.435' & @CRLF & _
'-4566.1-32.435' & @CRLF & _
'45661-32435' & @CRLF & _
'.4566132435' & @CRLF & _
'-.4566132435' & @CRLF & _
'-4566132435.' & @CRLF & _
'-45661.32435' & @CRLF & _
'-456a61.32435' & @CRLF & _
'4566132435'
$Str=StringRegExpReplace($Str, "(?<=\D)\.", "0.")
$Str=StringRegExpReplace($Str, "\.(?:$|\n|\r)", "")
$Test = StringRegExp($Str, "(?m)^(-?\d*\.?\d*)(?:$|\n|\r)", 3)
local $out=_ArrayToString($Test,@CRLF)
MsgBox(0,0,$out)要再简单我不会了,还有(?m)对$不起作用,不知为什么啊。
页:
[1]