我正在尝试通过 RegEx 进行如下验证...

If Regex.IsMatch(Output, "\b" & "Serial)" & "\b") Then 
'do something 
end if 

但我得到这个参数异常

parsing "\bSerial)\b" - Too many )'s. 

我确实理解错误,但我应该如何修改 RegEx 表达式?

更新。“Serial)”这个词是动态生成的。这意味着至少对我来说我也可以为另一个角色获得另一个异常(exception)

请您参考如下方法:

假设这是 VB.Net,您需要转义 ):

If Regex.IsMatch(Output, "\b" & "Serial\)" & "\b") Then 
    'do something 
End If 

在.Net正则表达式中,括号是分组字符。


如果像您所说的那样动态生成单词“Serial)”,您将必须 escape在将它传递给 RE 引擎之前:

If Regex.IsMatch(Output, "\b" & Regex.Escape("Serial)") & "\b") Then 
    'do something 
End If 

正如另一位回答者发布的那样,这与 "Serial) xyz" 不匹配(例如),因为 之间没有 \b) 和空格(\b 仅存在于 \w\W 字符之间,并且 ) 和一个空格是 \W).

你可能不得不求助于一个丑陋的 hack,比如:

If Regex.IsMatch(Output, "\s" & Regex.Escape("Serial)") & "\s") _ 
Or Regex.IsMatch(Output, "\s" & Regex.Escape("Serial)") & "$") _ 
Or Regex.IsMatch(Output, "^" & Regex.Escape("Serial)") & "\s") _ 
Or Regex.IsMatch(Output, "^" & Regex.Escape("Serial)") & "$") _ 
Then 
    'do something 
End If 

我认为也许您可以按照以下行匹配由 (^$) 和 \s 组成的字符类:

If Regex.IsMatch(Output, "[\s^]" & Regex.Escape("Serial)") & "[\s$]") Then 
    'do something 
End If 

但这似乎并不基于正则表达式测试器 here所以你可能不得不选择丑陋的 hack 版本,或者你可以将它们组合成一个正则表达式,如下所示:

var input = "Serial)" 
var escaped = Regex.Escape (input) 
var regex = "\s" & escaped & "\s|^" & escaped & "$|\s" & escaped & "$|^" & escaped & "\s" 
If Regex.IsMatch(Output, regex) Then 
    'do something 
End If 


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!