正则表达式以匹配这些pdf文件名

时间:2019-03-04 18:33:27

标签: c# regex c#-4.0

我正在寻找一个与fileNamePattern匹配的正则表达式。 pdf文件可以具有以下名称:8个字母数字字符,-,4个字母数字字符,-,4个字母数字字符,-,4个字母数字字符,-,12个字母数字字符+ .pdf

示例:

5b7f991f-0726-4dd5-856e-7cea820f02c5.pdf
138bcee6-db7f-47a7-97bf-69c0b3989698.pdf
e988315b-ade7-48e5-9733-35bb59a3c28d.pdf

我正在使用

^[A-Z][0-9]{8}[-][A-Z][0-9]{4}[-][A-Z][0-9]{4}[-][A-Z][0-9]{4}[-][A-Z][0-9]{12}[.]pdf

但是,由于没有匹配项,我不确定它是正确的。

3 个答案:

答案 0 :(得分:1)

Regex r = new Regex(@"^\w{8}-\w{4}-\w{4}-\w{4}-\w{12}\.pdf$");

如果您明确不想使用下划线,则可以使用:

^[a-zA-Z\d]{8}-[a-zA-Z\d]{4}-[a-zA-Z\d]{4}-[a-zA-Z\d]{4}-[a-zA-Z\d]{12}\.pdf$

正则表达式区分大小写(除非您使用RegexOptions指定它忽略大小写)。 现在的主要问题是您的正则表达式说要匹配字母然后匹配n位数字,而不是匹配n个字母数字字符。

通过设置不区分大小写的标志,您的正则表达式可以简化为:

^[A-Z\d]{8}-[A-Z\d]{4}-[A-Z\d]{4}-[A-Z\d]{4}-[A-Z\d]{12}\.pdf$

答案 1 :(得分:0)

这应该有效 /(\ w {8})-(\ w {4})-(\ w {4})-(\ w {4})-(\ w {12})(。pdf)/ i

我在这里RegEx Testing尝试过

\ w =字母数字 {n} =符号应出现的次数

gi =是标志:“ i” =不区分大小写。

答案 2 :(得分:0)

您只在正则表达式中匹配大写字母,而当您使用[A-Z][0-9]{4}时,您不匹配四个字母数字字符,而是匹配一个后跟4个数字的字母。

因此,您需要合并 [A-Z][0-9]到单个字符类[A-Z0-9]中,然后使用不区分大小写的标志。

此外,您需要在正则表达式的末尾使用$,以使模式与整个字符串匹配。

使用

^[A-Z0-9]{8}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{12}[.]pdf$

请参见regex demo

在C#中,

var rx = new Regex(@"^[A-Z0-9]{8}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{12}[.]pdf$", RegexOptions.IgnoreCase);

请注意,可以使用内联修饰符(?i)设置不区分大小写:

var pattern = @"(?i)^[A-Z0-9]{8}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{12}[.]pdf$";
// check if the string matches the pattern
if (Regex.IsMatch(s, pattern) 
{
    // The string matches...
}