Regex.IsMatch无效

时间:2018-01-22 10:15:32

标签: c# regex

检查值是否与特定条件匹配。值如下所示:

  

123456:123abc89:0099 @ ABC123

这就是我的C#程序分析值的方法:

if (Regex.IsMatch(input, "[0-9]:[a-zA-Z0-9]:[a-zA-Z0-9]@[a-zA-Z0-9]") == true)
{
    Console.WriteLine("Correct.");
}

出于某种原因,它不起作用。你有什么想法?请记住,我是C#的新手。

3 个答案:

答案 0 :(得分:5)

一般建议 - 调试你的正则表达式。一个方便的在线网站来测试你的正则表达式:https://regex101.com

在每个字符组后添加+

[0-9]+:[a-zA-Z0-9]+:[a-zA-Z0-9]+@[a-zA-Z0-9]+

撰写[0-9]时,它与列表中的单个字符相匹配。 +量词会在一次和无限次之间匹配 ,尽可能多次,根据需要回馈。

此外,Wiktor建议在末尾添加^$

^[0-9]+:[a-zA-Z0-9]+:[a-zA-Z0-9]+@[a-zA-Z0-9]+$
  • ^在字符串
  • 的开头断言位置
  • $在字符串末尾断言位置,或者在字符串末尾的行终止符之前断言(如果有的话)

作为旁注,无需在if语句中添加== true

if (Regex.IsMatch(input, "[0-9]+:[a-zA-Z0-9]+:[a-zA-Z0-9]+@[a-zA-Z0-9]+"))

答案 1 :(得分:1)

该字符串实际上与正则表达式不匹配。我来帮你调试一下。当您发现一段代码无法按预期工作时,您有两种选择:

  • 将代码细分为较小的部分以查看错误的位置
  • 使用调试器

如果您尝试仅将部分正则表达式与输入字符串的相应部分一起使用,您会发现它仍然无效。 (例如:[0-9]:[0-9]:[0-9]0:12:3不符。)

所以我们拿一个调试器,比如regex101.com,并注意到你在所有组之后正在调整量词。正确的正则表达式是这样的:

^[0-9]+:[a-zA-Z0-9]+:[a-zA-Z0-9]+@[a-zA-Z0-9]+$

确实匹配

123456:123abc89:0099@abc123

注意表达式末尾的^$符号,表示我们期待完全匹配。如果没有这些,表达式也会匹配A1:1:1@1%,因为存在匹配的子字符串(1:1:1@1)。

摆弄https://regex101.com/r/2T74K3/2

答案 2 :(得分:0)

模式应该是这样的:

[0-9]{6}:[a-zA-Z0-9]{8}:[a-zA-Z0-9]{4}@[a-zA-Z0-9]{6}

表明发生的次数。