2016-04-07 7 views
-1

私はC#でディレクトリ内のファイルをフィルタリングしようとしています。c#正規表現フィルタの書き方

...誰かが私を助けることができる...私は正規表現が最善の方法だと思いますが、私は表現を書いてトラブルにいるよ。ここに私のコード:

Regex reg = new Regex(Expr); 
var files = Directory.GetFiles(Dir, "*.txt") 
       .Where(path => reg.IsMatch(path)) 
       .ToList(); 

マイ式Exprになり"fileXXX"で始まり、 "_L.txt"で終わらないすべてのファイルと一致します。どのように問題を解決できますか?

ありがとうございました!

+0

[類似のもの](http://stackoverflow.com/questions/9653201/directory-getfiles-show-only-files-starting-with-a-numeric-value)です。あなたの 'path'には、ファイル名だけでなくファイルパスも含まれています。 –

+0

「XXX」とは何ですか? 3桁?それがリテラルの場合、正規表現は必要ありません。 –

答えて

0

fileXXXリテラルの場合、あなたは単なるStartsWithEndsWithで必要なものを達成することができます:

​​

注意をごpathは、フォルダパスだけでなく、ファイルを含むファイルパスが含まれていることは、名。そのため、チェックを実行するにはPath.GetFileNameWithoutExtension(path)を使用する必要があります。エルス

は、 ^fileXXX.*(?<!_L)$は前に起因する負の後読み (?<!_L)に( fileXXXで始まり、 _Lで終わらない(ここでは、拡張子なしのファイル名)、任意のテキストに一致する

var files1 = Directory 
    .GetFiles(Dir, "*.txt") 
    .Where(path => Regex.IsMatch(Path.GetFileNameWithoutExtension(path), @"^fileXXX.*(?<!_L)$")) 
    .ToList(); 

のような正規表現を使用します文字列アンカーの末尾$)。