En supposant que VB.Net est, vous avez besoin d'échapper à la )
:
If Regex.IsMatch(Output, "\b" & "Serial\)" & "\b") Then
'do something
End If
Dans les expressions régulières .Net, entre parenthèses sont les caractères de regroupement.
Si, comme vous le dites, le mot « série) » est généré dynamiquement, vous devrez escape avant de le transmettre au moteur RE:
If Regex.IsMatch(Output, "\b" & Regex.Escape("Serial)") & "\b") Then
'do something
End If
Comme un autre répondeur a posté, ceci ne correspondra pas "Serial) xyz"
(par exemple) puisqu'il n'y a pas \b
entre le )
et l'espace (\b
seulement existe entre\w
et \W
caractères et les deux )
et un espace sont \W
).
Vous pouvez avoir recours à une bidouille horrible comme:
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
Je pensais que vous pourriez peut-être correspondre à une classe de caractères consistant en (^
ou $
) et \s
le long des lignes de:
If Regex.IsMatch(Output, "[\s^]" & Regex.Escape("Serial)") & "[\s$]") Then
'do something
End If
mais cela ne semble pas fonctionner basé sur le testeur de regex here de sorte que vous devrez peut-être opter pour la version hack laide ou vous pouvez les combiner en une seule regex comme dans:
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
Je choisis le premier, et le cinquième! Merci Tim! – OrElse
+1 pour aller plus loin - Je serais intéressé de voir la solution ... – paxdiablo