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 で始まり、2 番目の文字が il の範囲にあるファイルのみを選択する必要があります。

4

3 に答える 3

2

Adali3文字目と4文字目をとって一致するので( al):

Adali
  --

^文字列の開始を探すことができる正規表現で使用してみてください( regex cheatsheet):

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

また、アスタリスクがまったく必要ないとは思いません。

PS: 余談ですが、この質問はあまりうまく書かれていないようです。このコードを自分でデバッグしてみてください。特に、LINQ を使用しないケースに対して正規表現をチェックしてみてください。ここでLINQ(質問にあるタグ)とは何の関係もないと確信していますが、問題は正規表現に関するものです(タグではまったく言及していませんでした)。

于 2012-05-04T12:23:48.310 に答える
0

文字列を固定していません。これにより、正規表現が in に一致alAdali.pdfます。

正規表現を次のように変更します。マッチング以外に何も必要ない場合にのみ実行^[Aa][i-lI-L].*できます。^[Aa][i-lI-L]

于 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 に答える