1

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

但是,我无法让它工作。

我在这里错过了什么?

4

3 回答 3

6

您一开始没有匹配数字。你的模式应该是:^[A-Za-z0-9]+_Enrollment_[0-9]{8}_[0-9]{4}\.xml$匹配给定的字符串。

变化:

  1. 您的字符串在第一个符号之前以字母数字字符串开头,_因此您需要同时检查(字母和数字)。
  2. Environment_部分之后,您有长度为 8 而不是 6 的数字。
  3. 不需要 double \。你只需要转义点(即\.)。

演示应用:

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");
        }
    }
}
于 2013-07-04T07:33:16.190 回答
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"
于 2013-07-04T07:35:19.913 回答
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/

于 2013-07-04T07:40:14.760 回答