通过正则表达式验证c#中的文件名

本文关键字:文件名 验证 正则表达式 | 更新日期: 2023-09-27 18:21:03

我想用以下格式验证文件名:LetterNumber_Enrollment_YYYYMMDD_HMM.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;
}

然而,我不能去上班。

我错过了什么吗?

通过正则表达式验证c#中的文件名

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

更改:

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

演示应用程序:

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");
        }
    }
}

您的Regex与实际字符串相去甚远

  • 您只在开头匹配一个字母(没有数字),因此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"

您可以尝试以下操作,它在开头匹配字母和数字,并确保日期有效。

[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/