我无法理解如何制作正则表达式 比如我有面具: 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);
但它不起作用......我在表达方面有一些错误。你能解释一下为什么会出错吗?
答案 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/可能会有所帮助。
(注意:不是答案,只是一些(希望)有用的附加信息。)