0

解析が必要なファイルがたくさんありますが、ファイル名には 2 つの日付パターンのいずれかが含まれています (システムをアップグレードしているので、ファイル パーサーが両方の日付形式を認識できるようにする必要があります。そして古い)。

ファイル名は<fileroot>_yyyyMMdd.logまたは<fileroot>_MMddyy.logのように見え、日付を解析するには数字を解析できる必要がありますが、^.*(\\d{6,8}).*$またはのような正規表現を使用して日付の数字を解析しようとする^.*(\\d{6}|\\d{8}).*$と、キャプチャ グループは常に 6 になります。ファイル名が 8 桁の場合でも、

C# の正規表現ライブラリを、正規表現との一致を可能な限り徹底的にする方法はありますか? 私はJavaでそれを行う方法を知っていますが、C#/ .NETではなく、言語はかなり新しいです。

4

2 に答える 2

3

問題は「.*」です。正規表現は貪欲なので、できるだけ多くの記号に一致します。最初の 2 桁を含む

ソリューション:

1) .*_(\\d{6,8})- 数字の前に常に _ がある場合

2).*[^\\d](\\d{6,8})

3).*?(\\d{6,8})

Javaでも同じ問題が発生します。正規表現はどこでも貪欲です。

于 2009-11-17T21:51:53.823 に答える
1

日付の後に常に既知の文字列が続くことがわかっている場合は、正規表現を変更して、その文字列を強制的に一致させます。

^.*(\\d{6,8})\.log$

これにより、末尾のを一致させるために、正規表現エンジンが8桁すべてを消費するように強制されます\.log

于 2009-11-17T21:41:24.500 に答える