0

私は一日中 Stackoverflow や他の多くのサイトを検索してきましたが、必要なものに一致する正規表現を取得しようとして頭を悩ませているようには見えません。

以下の例を参照してください。

これは私が探しているテキストです。

[Date]
;Possible values: Local, Static
;Type = Local
;If using Static type, the year/month/date to set the date to
;Year = 2012
;Month = 1
;Date = 1

[Time]
;Possible values: Local, Custom, Static
Type = Static
;If using Custom type, offset from UTC in hours (can be negative as well)
Offset = 0
;If using Static type (Hour value always the same on every server start), the value (0-24) to set the Hour to
Hour = 9

私が達成しようとしているのは、先読みで、[Time] ブラケットの下の Type = Static のみを取得することです。それが役立つ場合、私はC#を使用しています。私は多くの異なるパターンを試しましたが、成功しませんでした。

(?<=\[Time\]\n+Type = ).* 
(?<=\[Time\].*Type =).*

これは私が試したいくつかのアイデアです。なぜそれが何をしているのかについての説明とともに、誰かがこれを行う正しい方法を教えてもらえますか? コメントに基づいて、このファイルが私が示したものよりもはるかに大きく、ほとんどの [SETTING] に少なくとも 1 つのタイプ フラグが含まれているという事実をより明確にする必要があることに気付きました。また、ユーザーが ;comments をファイルに入れることはほぼ 100% 確実なので、その特定の [SETTING] を検索して入力して機能させる必要があります。

4

2 に答える 2

0

別のパターンを試すことができます。

(?<=Type\s*=\s*).*(?=[\r\n;]+)

私は、Type =常にセミコロンで始まる新しい行が続くと仮定してい;ます。

思い出させてくれた@SimonWhiteheadと@HamZaに感謝します。これにより両方の行がキャプチャされることに注意してくださいType =。最初の一致を無視して、2番目の一致のみを探す必要があります。

編集:別の式を試すことができますが、これは最初のものほど効率的ではありません:

(?<=\[Time\][\r\n;]*[^\r\n]+[\r\n]*Type\s*=\s*).*

正規表現ヒーローのデモ

于 2013-10-16T21:34:21.787 に答える