我一直在使用Regex.Match
函数来匹配使用以下代码的两个字符串
bool contains = Regex.Match(highlightedText, searchText, RegexOptions.IgnoreCase).Success;
此处此代码工作正常,但如果我将highlightedText
设置为“Rajeev”并将searchText
设置为“。”即点。它仍然会返回true
。
如果我在任何字符串中搜索.
,它会向我true
或不highlightedText
包含'{'}。或不。
为什么它会给我错误的价值?
答案 0 :(得分:2)
正则表达式"."
是任何符号。你的字符串包含任何符号?是。
使用@"\."
(转义点)查找字符串包含点。
对于字符串中的简单搜索子字符串,请使用string.IndexOf
,如下所示:
string text = "some kind of text";
Console.WriteLine("'{0}' contains '{1}'? {2}", text, "some", text.IndexOf("some", StringComparison.InvariantCultureIgnoreCase) >= 0);
Console.WriteLine("'{0}' contains '{1}'? {2}", text, "pleasure", text.IndexOf("pleasure", StringComparison.InvariantCultureIgnoreCase) >= 0);
结果:
'some kind of text' contains 'some'? True
'some kind of text' contains 'pleasure'? False
答案 1 :(得分:1)
dot匹配每个字符。要匹配点本身,请使用"\."
。
答案 2 :(得分:1)
您的searchText
是实际正则表达式,其中包含为解释保留的某些字符。这些通常被称为元字符,可以包括:
\
^
$
.
|
?
*
+
(
)
[
开口大括号{
。
如果您想在搜索中使用其中任何一个作为文字字符,那么您需要通过添加反斜杠前缀来逃避它们...例如\.
在您的情况下,.
元字符用作通配符来表示任何单个字符。
答案 3 :(得分:1)
基本上是正则表达式语法,
Regex.Match(STRING, PATTERN, RegexOptions.IgnoreCase)
因此,您的searchText
参数将被视为正则表达式模式,这就是您将true
作为回报的原因。
" .
"匹配除换行符之外的任何单个字符
其他行为列表 http://www.mikesdotnetting.com/article/46/c-regular-expressions-cheat-sheet
Regex.Match(highlightedText, @"\.", RegexOptions.IgnoreCase).Success
这适用于您的情况。