0

我有以下声明:

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 开头并且第二个字母在 il 范围内的文件。

4

3 回答 3

2

因为它匹配Adali第 3 个和第 4 个字符 ( al):

Adali
  --

尝试^在您的正则表达式中使用它允许查找字符串的开头(正则表达式备忘单):

Regex.IsMatch(..., "^[Aa][i-lI-L].*")

我也怀疑你根本不需要星号。

PS:作为旁注,让我注意到这个问题似乎写得不太好。您应该尝试自己调试此代码,特别是您应该尝试在没有 LINQ 的情况下检查您的正则表达式。我确定这里与 LINQ (您在问题中的标签)无关,但问题在于正则表达式(您根本没有在标签中提及)。

于 2012-05-04T12:23:48.310 回答
0

您没有锚定字符串。这使得正则表达式匹配alin Adali.pdf

将正则表达式更改为^[Aa][i-lI-L].*You can do just if you can do just ^[Aa][i-lI-L]if you don't need any 除了匹配。

于 2012-05-04T12:27:59.963 回答
0

你应该这样做

var f = Directory.GetFiles(tb_Path.Text, "A*.pdf").Where(file => Regex.IsMatch(Path.GetFileName(file), "[Aa][i-lI-L].pdf")).ToArray();

当您在正则表达式中调用“。*”时,Adali 接受

于 2012-05-04T12:28:44.313 回答