2016-09-28 4 views
-2

私は以下のマッチを呼び出していますが、「エクスプレッションエバリュエーターの内部エラー」という例外が発生しています。 "* _sales.txt"をconfig.FileNamePatternとして渡してみます。何らかの理由でこのパターンが気に入らない。私は間違って何をしていますか?私はそれを '@'記号の有無にかかわらず試してみました。私のパターンでRegex Matchスロー例外が発生する

Match match = Regex.Match(Path.GetFileName(file), @config.FileNamePattern, RegexOptions.IgnoreCase); 
+1

無効な正規表現を渡したためです。それは量子で始めることはできません。 '@" _ sales \ .txt $ "' –

+2

と '* _sales.txt'は有効なパターンではありません。 '*'は量子であり、あなたはそれを定量化するために何も持っていません。 '。* sales.txt'は有効です。 –

+0

実際には、疑問がワイルドカードに関係しているとは思っていません。誤った正規表現パターンとして使用されたのは、OPが正規表現として使用できると思ったからです。 –

答えて

0

Regex.Matchの2番目の引数は正規表現のパターンです。あなたはワイルドカードであると考えられる*で始まる"*_sales.txt"を渡しますが、実際にはに0以上の一致が一致する量限定子であるとします。それは、パターンの始まりを量子化することはできません、それは無効な正規表現です。

あなたは文字列が_sales.txtで終わるかどうかを確認するために

@"_sales\.txt$" 

を使用する場合があります。また、オプションにRegexOptions.RightToLeftを追加すると、最後からの文字列の一致を最適化できます。

.は、リテラルドットと一致するようにエスケープされています。

また、特殊文字を一度エスケープするだけでよいので、逐語文字リテラルは正規表現パターンを定義する最も良い方法です。

関連する問題