我正在尝试通过 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