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

Regular expressions to match these pdf file names

我正在寻找匹配 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

但是,我不确定它是否正确,因为我找不到匹配项。

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$

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

我在RegEx Testing

这里试过了

\w = 字母数字 {n} = 标志应该出现的次数

gi = 标志:"i" = 不区分大小写。

您只匹配正则表达式中的大写字母,当您使用 [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...
}