RegEx To Match"整个单词"返回异常

OrE*_*lse 2 regex vb.net validation

我试图通过RegEx验证如下...

If Regex.IsMatch(Output, "\b" & "Serial)" & "\b") Then
'do something
end if
Run Code Online (Sandbox Code Playgroud)

但是我得到了这个Argument异常

parsing "\bSerial)\b" - Too many )'s.
Run Code Online (Sandbox Code Playgroud)

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

UPDATE."Serial"一词是动态生成的.这意味着至少对我来说,我也可以为另一个角色获得另一个例外.

pax*_*blo 5

假设是VB.Net,你需要逃避):

If Regex.IsMatch(Output, "\b" & "Serial\)" & "\b") Then
    'do something
End If
Run Code Online (Sandbox Code Playgroud)

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


如果,如你所说,动态生成"Serial"这个词,你必须在将它传递给RE引擎之前将其转义:

If Regex.IsMatch(Output, "\b" & Regex.Escape("Serial)") & "\b") Then
    'do something
End If
Run Code Online (Sandbox Code Playgroud)

正如另一个回答者发布的那样,这将不匹配"Serial) xyz"(例如),因为空间\b之间没有)(\b只存在 字符和两者之间\w以及空间).\W)\W

你可能不得不求助于一个丑陋的黑客:

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
Run Code Online (Sandbox Code Playgroud)

我想也许你可以匹配一个由(^$)组成的字符类\s:

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

但这似乎不适用于此处的正则表达式测试程序,因此您可能需要使用丑陋的黑客版本,或者您可以将它们组合成单个正则表达式,如:

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
Run Code Online (Sandbox Code Playgroud)