2012-05-04 6 views
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番目の文字がi-lの範囲にあるファイルのみを選択する必要があります。

答えて

2

それはAdali取って3番目と4番目の文字(al)と一致しているので:また

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

Adali 
    -- 

は、文字列(regex cheatsheet)の開始を探していることができ、あなたの正規表現で^を使用してみてください私はアスタリスクが全く必要ではないかと疑う。

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

0

文字列を固定していません。正規表現はalと一致し、Adali.pdfになります。

正規表現を^[Aa][i-lI-L].*に変更してください。一致以外に何も必要がない場合は、ただ^[Aa][i-lI-L]とすることができます。

0

あなたが呼び出すと、この

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

を行うためにすべき "*" Adali正規表現

に受け入れます