zldfsz 发表于 2013-7-11 11:29:20

正则替换效率问题求助【已解决】

本帖最后由 zldfsz 于 2013-7-13 00:39 编辑

有一些字符串需要将其替换掉,我现在是用的如下方法替换,能不能用一个正则表达式就能实现下面几步的功能,或者有什么办法能将代码简短。对正则不怎么了解,忘各位高人指点一下
就是将全角替换为半角,方括号替换为小括号,X替换为*

$str="[】)\](jr【dfgfdf】()】)\]\][xfgfdfxdfjkXgXjh×+-g/";有类似这样的字符串将其按下面方法替换掉
$str = StringRegExpReplace($str, "[[(【]", "(")
$str = StringRegExpReplace($str, "[】)\]]", ")")
$str = StringRegExpReplace($str, "", "*")
$str = StringRegExpReplace($str, "+", "+")
$str = StringRegExpReplace($str, "-", "-")
$str = StringRegExpReplace($str, "/", "/")
MsgBox(0, '替换结果', $str)
原以为可以用一个正则表达式就能实现,看来只有这样了,感谢 user3000 兄解答

user3000 发表于 2013-7-11 12:49:17

本帖最后由 user3000 于 2013-7-11 12:51 编辑

回复 1# zldfsz


    替换的结果都不一致,一个正则做不来吧?
但如果考虑用数组存放正则表达式及替换结果,管理,增删\表达式和替换内容,会比较容易和直观些.$str="[】)\](jr【dfgfdf】()】)\]\][xfgfdfxdfjkXgXjh×+-g/";有类似这样的字符串将其按下面方法替换掉
$str1 = $str
$str1 = StringRegExpReplace($str1, "[[(【]", "(")
$str1 = StringRegExpReplace($str1, "[】)\]]", ")")
$str1 = StringRegExpReplace($str1, "", "*")
$str1 = StringRegExpReplace($str1, "+", "+")
$str1 = StringRegExpReplace($str1, "-", "-")
$str1 = StringRegExpReplace($str1, "/", "/")
$str2 = $str
Local $aArray = [ _
                           ['[\[(【]', "\("],['[】)\]]', "\)"],['', "\*"], _
                           ['+', "\+"],["-", "\-"],["/", "/"] _
                                          ]
For $i = 0 To 5
        $str2 = StringRegExpReplace($str2, $aArray[$i], $aArray[$i])
Next
MsgBox(0, '替换结果', $str1 & @CR & $str2)
页: [1]
查看完整版本: 正则替换效率问题求助【已解决】