我有以下声明:
Directory.GetFiles(filePath, "A*.pdf")
.Where(file => Regex.IsMatch(Path.GetFileName(file), "[Aa][i-lI-L].*"))
.Skip((pageNum - 1) * pageSize)
.Take(pageSize)
.Select(path => new FileInfo(path))
.ToArray()
我的问题是上面的语句还找到了它不应该的文件“Adali.pdf” - 但我无法弄清楚原因。
以上陈述只应选择以a开头的文件,以及第二个字母在i-l范围内的文件。
答案 0 :(得分:2)
因为它匹配Adali
第3个和第4个字符(al
):
Adali
--
尝试在正则表达式中使用^
,以便查找字符串的开头(regex cheatsheet):
Regex.IsMatch(..., "^[Aa][i-lI-L].*")
我也怀疑你需要星号。
PS:作为旁注,让我注意到这个问题似乎没有写得那么好。您应该尝试自己调试此代码,特别是您应该尝试在没有LINQ的情况下检查您的正则表达式。我确定LINQ(你问题中的标签)与此无关,但问题在于正则表达式(你在标签中没有提到)。答案 1 :(得分:0)
您没有锚定字符串。这使正则表达式与al
中的Adali.pdf
匹配。
将正则表达式更改为^[Aa][i-lI-L].*
如果除了匹配之外不需要任何其他内容,则可以只执行^[Aa][i-lI-L]
。
答案 2 :(得分:0)
你应该这样做
var f = Directory.GetFiles(tb_Path.Text, "A*.pdf").Where(file => Regex.IsMatch(Path.GetFileName(file), "[Aa][i-lI-L].pdf")).ToArray();
当你打电话给“。*”Adali时接受Regex