我想用这种格式验证文件名:LetterNumber_Enrollment_YYYYMMDD_HHMM.xml
string filename = "Try123_Enrollment_20130102_1200.xml";
Regex pattern = new Regex(@"[a-zA-z]_Enrollment_[0-9]{6}_[0-9]{4}\\.xml");
if (pattern.IsMatch(filename))
{
return isValid = true;
}
但是,我无法让它发挥作用。
我错过了什么?
答案 0 :(得分:6)
您在开头不匹配数字。您的模式应为:^[A-Za-z0-9]+_Enrollment_[0-9]{8}_[0-9]{4}\.xml$
以匹配给定的字符串。
的变化:
_
符号前的字母数字字符串开头,因此您需要检查两者(字母和数字)。Environment_
部分后,您的数字长度为8而不是6。\
。你只需要逃避点(即\.
)。using System;
using System.Text.RegularExpressions;
class Test {
static void Main() {
string filename = "Try123_Enrollment_20130102_1200.xml";
Regex pattern = new Regex(@"^[A-Za-z0-9]+_Enrollment_[0-9]{8}_[0-9]{4}\.xml$");
if (pattern.IsMatch(filename))
{
Console.WriteLine("Matched");
}
}
}
答案 1 :(得分:0)
你的正则表达式远不及你的实际字符串:
Try123
不匹配20130102
不匹配\\.xml
),但你还在字符串上使用了@
:@
你不需要逃脱。请改为尝试:
@"[a-zA-Z]{3}\d{3}_Enrollment_[0-9]{8}_[0-9]{4}\.xml"
我假设你一开始只想要三个字母和三个数字;事实上你可能想要这个:
@"[\w]*_Enrollment_[0-9]{8}_[0-9]{4}\.xml"
答案 2 :(得分:0)
您可以尝试以下操作,它在开头匹配字母和数字,并确保日期有效。
[A-Za-z0-9]+_Enrollment_(19|20)\d\d(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])_[0-9]{4}\.xml
顺便说一下,为了测试你的正则表达式,试试Rad Software的免费正则表达式设计器,我发现它可以帮助我预先计算出复杂的表达式。