C# 单反斜杠的正则表达式模式

C# 单反斜杠的正则表达式模式,c#,regex,C#,Regex,我正在尝试匹配下面的字符串。我不能把它弄对。有人能帮忙吗 string str = "test\tester"; if (Regex.IsMatch(str, "/\\/")) MessageBox.Show("Match"); else MessageBox.Show("Not match"); 我想知道我应该使用什么正则表达式模式来匹配它。单个反斜杠的正则表达式是\\。如果要使字

我正在尝试匹配下面的字符串。我不能把它弄对。有人能帮忙吗

string str = "test\tester";
            if (Regex.IsMatch(str, "/\\/"))
                MessageBox.Show("Match");
            else
                MessageBox.Show("Not match");

我想知道我应该使用什么正则表达式模式来匹配它。

单个反斜杠的正则表达式是
\\
。如果要使字符串在C#中完全匹配,请使用
@
运算符:

Regex.IsMatch(str,@.*\.*)

或者,您可以使用C#的转义字符:


Regex.IsMatch(str,“.\\\.”)

单个反斜杠的正则表达式是
\\
。如果要使字符串在C#中完全匹配,请使用
@
运算符:

Regex.IsMatch(str,@.*\.*)

或者,您可以使用C#的转义字符:


Regex.IsMatch(str,“.\\\.”)
只需使用:
Regex.IsMatch(str,@.*\.*)


双精度
\
用于转义反斜杠。

只需使用:
Regex.IsMatch(str,@.*\.*)


双精度
\
用于转义反斜杠。

在这种情况下,从性能角度来看,使用
字符串.Contains()
更好:

string str = @"test\tester"; //<- note the @

if (str.Contains("\\"))
    MessageBox.Show("Match");
else
    MessageBox.Show("Not match");

string str=@“test\tester”// 在这种情况下,从性能角度来看,使用
string.Contains()
会更好:

string str = @"test\tester"; //<- note the @

if (str.Contains("\\"))
    MessageBox.Show("Match");
else
    MessageBox.Show("Not match");

string str=@“test\tester”// 我怀疑您的测试代码是错误的

您正在测试的内容:

string str = "test\tester";
但如果您得到的是“两个参数被反斜杠分隔”,则应该是

string str = "test\\tester";
这是因为反斜杠在常量中表示为
\\
。因为
\t
恰好表示制表符,所以测试代码不会在编译时抛出错误。如果您这样做:

string str = "mytest\mytester";

您将得到一个错误,因为
\m
无效。

我怀疑您的测试代码是错误的

您正在测试的内容:

string str = "test\tester";
但如果您得到的是“两个参数被反斜杠分隔”,则应该是

string str = "test\\tester";
这是因为反斜杠在常量中表示为
\\
。因为
\t
恰好表示制表符,所以测试代码不会在编译时抛出错误。如果您这样做:

string str = "mytest\mytester";


您将得到一个错误,因为
\m
无效。

您不应该在开始和结束处有
/
。Regex.IsMatch(str,@“\\”)@14V我得到一个“不匹配”。@Thomas它不是反斜杠字符,而是制表符(
\t
)<代码>测试员
试试这个
str=@“test\tester”@Thomas My Regex是正确的。您的字符串不包含反斜杠。它是您在字符串中看到的制表符字符…您不应该在开始和结束处有
/
。Regex.IsMatch(str,@“\\”)@14V我得到一个“不匹配”。@Thomas它不是反斜杠字符,它是制表符(
\t
)<代码>测试员
试试这个
str=@“test\tester”@Thomas My Regex是正确的。您的字符串不包含反斜杠。它是您在字符串中看到的制表符字符…传递给该方法的正则表达式应该是
*.*
,不是吗?如果是这样,这将匹配0个或多个
,这将始终返回true。无论
@
,模式仍将失败,因为
匹配包括斜杠在内的任何字符。这意味着
tester\\test
tester\test\test
Console.WriteLine(Regex.IsMatch(@“test\\test”,@.*\.*)和&Regex.IsMatch(@“test”\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\输出是。它匹配多个反斜杠。您可以简单地将模式写为
*
,因为它会做同样的事情。@Kami-不完全是-它必须至少有一个反斜杠才能匹配,这是(我认为)OP所要求的。是的,它将匹配多个斜杠,但不匹配0,因此它与
*
不同。传递给该方法的正则表达式将是
*.*.
,不是吗?如果是这样,这将匹配0个或多个
,这将始终返回true。无论
@
,模式仍将失败,因为
匹配包括斜杠在内的任何字符。这意味着
tester\\test
tester\test\test
Console.WriteLine(Regex.IsMatch(@“test\\test”,@.*\.*)和&Regex.IsMatch(@“test”\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\输出是。它匹配多个反斜杠。您可以简单地将模式写为
*
,因为它会做同样的事情。@Kami-不完全是-它必须至少有一个反斜杠才能匹配,这是(我认为)OP所要求的。的确,它将匹配多个斜杠,但它不会匹配0,因此它与
*
不同。比其他答案简单得多,而且有效+1我已从网络设置了此值(str),但无法逃避\。它实际上是一个用户名,格式为Domain\Username。我想拆分它,但对于条件str.Contains(“\\”),它永远不会返回true。对于分析,它返回+1,但是对于red herring,它返回-1。在性能成为问题之前,它不是一个问题。@Alanmore我不同意——特别是在这种情况下,尤其是在复杂性方面。RegEx是一个远比Contains复杂得多的解决方案,有许多隐藏的性能陷阱。比其他答案简单得多,而且有效+1我已从网络设置了此值(str),但无法逃避\。它实际上是一个用户名,格式为Domain\Username。我想拆分它,但对于条件str.Contains(“\\”),它永远不会返回true。对于分析,它返回+1,但是对于red herring,它返回-1。在性能成为问题之前,它不是一个问题。@Alanmore我不同意——特别是在这种情况下,尤其是在复杂性方面。RegEx是一个远比Contains复杂得多的解决方案,有许多隐藏的性能缺陷。正如前面提到的,这是因为C#不将“test\tester”视为
test\tester
——它是vie