正则表达式C#(xxxx-xxxx掩码)

时间:2011-01-24 09:15:09

标签: c# regex

我无法理解如何制作正则表达式 比如我有面具: xxxx-xxxx-xxxx其中“x”可以是a-z或A-Z或0-9

并且有代码:

            string[] numbers = 
                 {
                     "1a3F-5t5C-FIG0-InFo", 
                     "444-234-2245", 
                     "444.-2344-2245", 
                 };
        string sPattern = "^[a-z0-9A-z]{4}-[a-z0-9A-z]{4}-[a-z0-9A-z]{4}$-[a-z0-9A-z]{4}$";
        var validList = new List<string>();

        foreach (string s in numbers)
        {
            if (Regex.IsMatch(s, sPattern))
            {
                validList.Add(s);
            }
        }
        Assert.IsTrue(validList.Count==1);

但它不起作用......我在表达方面有一些错误。你能解释一下为什么会出错吗?

2 个答案:

答案 0 :(得分:6)

有两件事让人想起:“a-z0-9A-z”应该是“a-z0-9A-Z”(注意大写字母Z),你在表达式的中间有一个$不应该在那里。看起来你的面具目前正在尝试匹配四个的xxxx集,而不是三个。

尝试修复这三件事,然后在遇到问题时更新问题。

我个人会为模式创建Regex的实例,顺便说一下:

Regex regex = new Regex(
    "^[a-z0-9A-Z]{4}-[a-z0-9A-Z]{4}-[a-z0-9A-Z]{4}$");

答案 1 :(得分:0)

您可能希望使用命名分组(?<name>.*),该分组适用于多个子部分((?<str>[^-]+)-?)+

同样http://txt2re.com/可能会有所帮助。

(注意:不是答案,只是一些(希望)有用的附加信息。)