通过正则表达式验证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;
}
然而,我不能去上班。
我错过了什么吗?
开头的数字不匹配。您的模式应该是:^[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");
}
}
}
您的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/