找回密码
 加入
搜索
查看: 2378|回复: 4

[AU3基础] (已解决)挑选正确的数字如何挑选(正则)

[复制链接]
发表于 2014-6-5 18:05:51 | 显示全部楼层 |阅读模式
本帖最后由 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"
发表于 2014-6-5 20:50:20 | 显示全部楼层
本帖最后由 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)
正则有点问题,需要修改。。。
发表于 2014-6-5 21:33:23 | 显示全部楼层
替换两次
$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)
 楼主| 发表于 2014-6-6 09:20:59 | 显示全部楼层
回复 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)
发表于 2014-6-6 12:02:01 | 显示全部楼层
本帖最后由 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金钱 +20 收起 理由
shenrenba + 20

查看全部评分

您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-30 02:59 , Processed in 0.140057 second(s), 27 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表