nivisde 发表于 2012-7-17 22:44:37

自动识别计算机名并对应语音文件,请教用正则提取字母和数字[已解决]

本帖最后由 nivisde 于 2012-7-18 00:41 编辑

在写一个语音呼叫网管的工具,计算机名获取到的,但是现在要语音播报对应的机器号。
有个问题难住了。

本来我想是这样识别计算机名的
计算机名,从右至坐一步一步分割单个长度,然后根据字符是否是字母然后停止分隔,并记录改位置。
然后就可以分隔出来后面的数字部分,和前面的字母部分。
然后分别分隔字符部分和数字部分对应到相应的语音文件。

有个问题就是如果别人的计算机名前缀有字母数字混合,例如 A1B如此就麻烦得大了。
且上面的方法效率很低,能力有限也只能用这样的笨方法了。

请会正则的朋友帮个忙,
用正则表达式 分隔出 计算机名中的 前面字母部分和后面的数字部分。先谢谢了

user3000 发表于 2012-7-17 23:26:01

回复 1# nivisde

Local $computerName = 'PC _088_ AB'
Local $str = StringRegExp($ComputerName, '^(\D*)\d*', 1)
If Not @error Then MsgBox(0, '提取数字前面所有字符', $str)

$str = StringRegExp($ComputerName, '^([[:alpha:]]*)\d*', 1)
If Not @error Then MsgBox(0, '只提取前面字母', $str)

$str = StringRegExp($ComputerName, '\d*([[:alpha:]]*)$', 1)
If Not @error Then MsgBox(0, '只提取后面字母', $str)

Local $num = StringRegExp($ComputerName, '^\D*(\d*)', 1)
If Not @error Then MsgBox(0, '数字', $num)

nivisde 发表于 2012-7-18 00:30:07

本帖最后由 nivisde 于 2012-7-18 00:37 编辑

谢楼上,我用自己的方法弄了个。贴上代码
Func NOTICE($COMPUTERNAME)
        Local $sound
        Local $INDEX=0
        Local $COMPUTERNAME_STR
        Local $COMPUTERNAME_NUM
        Local $COMPUTERNAME_STR_ARRAY=
        Local $COMPUTERNAME_NUM_ARRAY=
        $COMPUTERNAME_LEN=IniRead($SERVER_CONFIG,"SecuritySrv","COMPUTERLEN","100000")
        If $COMPUTERNAME_LEN=100000 Then
                MsgBox(0+48+262144,"提示","测试/免费 用户不提供计算机名语音播报功能,付费用户联系客服解决此问题",3)
        Else
                $COMPUTERNAME_STR=StringLeft($COMPUTERNAME,$COMPUTERNAME_LEN)
                $COMPUTERNAME_NUM=StringMid($COMPUTERNAME,($COMPUTERNAME_LEN+1))
                For $INDEX=1 To StringLen($COMPUTERNAME_STR)
                        ReDim $COMPUTERNAME_STR_ARRAY[$INDEX+1]
                        $COMPUTERNAME_STR_ARRAY[$INDEX]=StringMid($COMPUTERNAME_STR,$INDEX,1)
                        $COMPUTERNAME_STR_ARRAY+=1
                Next
;分解计算机名字母部分装入数组
                For $INDEX=1 To StringLen($COMPUTERNAME_NUM)
                        ReDim $COMPUTERNAME_NUM_ARRAY[$INDEX+1]
                        $COMPUTERNAME_NUM_ARRAY[$INDEX]=StringMid($COMPUTERNAME_NUM,$INDEX,1)
                        $COMPUTERNAME_NUM_ARRAY+=1
                Next
;分解计算机名数字部分装入数组
                $sound = _SoundOpen("sound\Zgzryqzy.wav")
                If Not @error Then
                        _SoundPlay($sound,1)
                Else
                        MsgBox(0+48+262144,"提示","打开声音文件错误,不能播放声音!",2)
                EndIf
                _SoundClose($sound) ;播放工作人员请注意 语音文件
                For $INDEX=1 To $COMPUTERNAME_STR_ARRAY
                        $COMPUTERNAME_STR_ARRAY[$INDEX]=StringUpper($COMPUTERNAME_STR_ARRAY[$INDEX])
                        $sound = _SoundOpen("sound\"&$COMPUTERNAME_STR_ARRAY[$INDEX]&".wav")
                        If Not @error Then
                                _SoundPlay($sound,1)
                        Else
                                MsgBox(0+48+262144,"提示","打开声音文件错误,不能播放声音!",2)
                        EndIf
                        _SoundClose($sound)       
                Next ;播放字母对应 语音文件
                For $INDEX=1 To $COMPUTERNAME_NUM_ARRAY
                        $COMPUTERNAME_NUM_ARRAY[$INDEX]=StringUpper($COMPUTERNAME_NUM_ARRAY[$INDEX])
                        $sound = _SoundOpen("sound\"&$COMPUTERNAME_NUM_ARRAY[$INDEX]&".wav")
                        If Not @error Then
                                _SoundPlay($sound,1)
                        Else
                                MsgBox(0+48+262144,"提示","打开声音文件错误,不能播放声音!",2)
                        EndIf
                        _SoundClose($sound)       
                Next ;播放数字对应 语音文件
                $sound = _SoundOpen("sound\Zhj.wav")
                If Not @error Then
                        _SoundPlay($sound,1)
                Else
                        MsgBox(0+48+262144,"提示","打开声音文件错误,不能播放声音!",2)
                EndIf
                _SoundClose($sound) ;播放机号语音文件
        EndIf
EndFunc

nivisde 发表于 2012-7-18 00:30:19

本帖最后由 nivisde 于 2012-7-18 00:56 编辑

哈哈,我笨了。直接分解整个计算机名称就是了。哎。。Func NOTICE($COMPUTERNAME)
        Local $sound
        Local $INDEX=0
        Local $COMPUTERNAME_ARRAY=
        For $INDEX=1 To StringLen($COMPUTERNAME)
                ReDim $COMPUTERNAME_ARRAY[$INDEX+1]
                $COMPUTERNAME_ARRAY[$INDEX]=StringMid($COMPUTERNAME,$INDEX,1)
                $COMPUTERNAME_ARRAY+=1
        Next
        $sound = _SoundOpen("sound\Zgzryqzy.wav")
        If Not @error Then
                _SoundPlay($sound,1)
        Else
                MsgBox(0+48+262144,"提示","打开声音文件错误,不能播放声音!",2)
        EndIf
        _SoundClose($sound)
        For $INDEX=1 To $COMPUTERNAME_ARRAY
                $COMPUTERNAME_ARRAY[$INDEX]=StringUpper($COMPUTERNAME_ARRAY[$INDEX])
                $sound = _SoundOpen("sound\"&$COMPUTERNAME_ARRAY[$INDEX]&".wav")
                If Not @error Then
                        _SoundPlay($sound,1)
                Else
                        MsgBox(0+48+262144,"提示","打开声音文件错误,不能播放声音!",2)
                EndIf
                _SoundClose($sound)       
        Next
        $sound = _SoundOpen("sound\Zhj.wav")
        If Not @error Then
                _SoundPlay($sound,1)
        Else
                MsgBox(0+48+262144,"提示","打开声音文件错误,不能播放声音!",2)
        EndIf
        _SoundClose($sound)
EndFunc
页: [1]
查看完整版本: 自动识别计算机名并对应语音文件,请教用正则提取字母和数字[已解决]