2

ディレクトリ内のファイル拡張子ごとにファイルを削除したい。現在、私のプログラムは、次のように「ドット アスタリスク」フィルタを使用してすべてのファイル タイプを選択するだけです。

.*  

.abcファイル拡張子を持つファイルを除くすべてのファイルを削除する必要があります。これを反映するように正規表現フィルターを変更するにはどうすればよいですか?

4

5 に答える 5

2

または、最も単純に:

(?i)\.abc$

それに一致するための派手な正規表現エンジン(ルックアラウンドをサポートする)も必要ありません。コード内の一致を否定するだけです。一致する場合は、削除しないでください。そうでない場合は、削除してください。

(?i)パーツはオプションです。これにより、正規表現の大文字と小文字が区別されなくなります (したがって、file1.abcおよびFILE2.ABCと一致します)。Regex optionsを使用して同じ効果を得ることができます。

于 2012-10-24T01:29:43.883 に答える
1

の先読み後読み(参照しているがそれをサポートしていると仮定します):

^.*(?<!\.abc)$

申し訳ありませんが、先読みではなく後読みが必要です。

于 2012-10-24T01:20:01.203 に答える
0

これを簡単に試してくださいregex

^.*(?=[.]abc$)

説明:

^ 一致は、文字列または行の先頭から開始する必要があります。

(?= subexpression) ゼロ幅の正先読みアサーション。

[ character_group ] character_group 内の任意の 1 文字に一致します。

$ 一致は、文字列\の末尾か、行または文字列の末尾の n の前で発生する必要があります。

于 2012-10-24T07:19:04.630 に答える
0

次のように、入力の最後に固定された否定的な後ろ向きを使用できます。

^.*(?<!\.abc)$

または、より単純に、入力の開始に固定された否定的な先読みを使用します。

^(?!.*\.abc$)
于 2012-10-24T01:24:51.700 に答える
0

「本当の」正規表現を含む返信もあります。

(^.?.?.?|[^.]...|\.[^a]..|\..[^b].|\...[^c])$

ただし、特に2番目の拡張機能が必要な場合は、これが非常に複雑になることがわかります。そのため、実際には他のソリューションのいくつかを実際に使用したいと考えています:-)

于 2012-10-24T01:48:19.623 に答える