检查值是否与特定条件匹配。值如下所示:
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#的新手。
答案 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
)。
答案 2 :(得分:0)
模式应该是这样的:
[0-9]{6}:[a-zA-Z0-9]{8}:[a-zA-Z0-9]{4}@[a-zA-Z0-9]{6}
表明发生的次数。