我正在寻找一个与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
但是,由于没有匹配项,我不确定它是正确的。
答案 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...
}