通过regex验证c#中的文件名

时间:2013-07-04 07:27:22

标签: c# regex

我想用这种格式验证文件名: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;
}

但是,我无法让它发挥作用。

我错过了什么?

3 个答案:

答案 0 :(得分:6)

您在开头不匹配数字。您的模式应为:^[A-Za-z0-9]+_Enrollment_[0-9]{8}_[0-9]{4}\.xml$以匹配给定的字符串。

的变化:

  1. 您的字符串以第一个_符号前的字母数字字符串开头,因此您需要检查两者(字母和数字)。
  2. Environment_部分后,您的数字长度为8而不是6。
  3. 无需加倍\。你只需要逃避点(即\.)。
  4. Demo app:

    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不匹配
  • 您在日期部分匹配6位而不是8位,因此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的免费正则表达式设计器,我发现它可以帮助我预先计算出复杂的表达式。

http://www.radsoftware.com.au/regexdesigner/