使用正则表达式函数替换特殊字符时出错

时间:2017-09-15 10:24:27

标签: regex vbscript

我正在尝试替换字符串中的特殊字符和空格。我在网上发现正则表达式函数对此很方便,但我似乎无法使其正常工作。

当我尝试这个时,正则表达式函数会抛出错误"预期的指令结束":

Dim param = Regex.Replace("te  !,;stDD ", "[^A-Za-z0-9]", "")

当我尝试这个时,字符串不会改变,但正则表达式函数确实通过了:

Set re = New RegExp
re.Pattern = "[^A-Za-z0-9]"
param = re.Replace("te  !,;stDD ", "")  'string doesn't change on result

1 个答案:

答案 0 :(得分:3)

  

当我尝试这个时,正则表达式函数抛出一个错误“预期的指令结束”:

Dim param = Regex.Replace("te  !,;stDD ", "[^A-Za-z0-9]", "")

解析器引发错误,而不是正则表达式方法。在VBScript中,您无法在同一步骤中定义变量并为其分配值。你必须分开定义和赋值(如果你想要一个明确的定义)。

Dim param
param = Regex.Replace("te  !,;stDD ", "[^A-Za-z0-9]", "")

你可以将两个语句分成一行,但用冒号分隔:

Dim param : param = Regex.Replace("te  !,;stDD ", "[^A-Za-z0-9]", "")

但请注意,VBScript中没有Regex类带有静态Replace()方法,因此您仍然会从Regex.Replace()收到错误。

您必须像在第二个代码段中一样实例化RegExp对象,并使用该对象的Replace()方法。

  

当我尝试这个时,字符串不会改变,但正则表达式函数确实通过了:

Set re = New RegExp
re.Pattern = "[^A-Za-z0-9]"
param = re.Replace("te  !,;stDD ", "")   'string doesn't change on result

但字符串确实更改。如果你仔细看看输入和输出,你会看到:

"te  !,;stDD "      ← input string
"te !,;stDD "       ← output string

您的替换操作将删除字符串中既不是字母也不是数字的第一个字符。对于作为第一个空格的示例字符串。要删除非字母或数字的所有字符,您需要将Global属性设置为True

Set re = New RegExp
re.Pattern = "[^A-Za-z0-9]"
re.Global  = True
param = re.Replace("te  !,;stDD ", "")