2

次のテキストファイルがあります。

#Beginning of the file

aaa
bbbb
ccc

dddd
eee
ffff

ggggg
hhhsasas
dsdsd

#end of file

各セクションの先頭の空行から始まるこのファイルの一部を、このセクションからテキスト セクションの最後までのテキストと一致させる方法 (次のセクション間の改行なし)。したがって、上記の例を使用して、3 つの一致を取得したいと思います。

#Beginning of the first match    

aaa
bbbb
ccc
#End of first match
#Beginning of the second match

dddd
eee
ffff
#End of second match
#Beginning of the third match

ggggg
hhhsasas
dsdsd
#End of third match

私はこのようなことを試しました:

(\n\n)[^(\n\n)]*

^(\n\n) はグループではなく別の記号として扱われるため、最初の行の終わりに一致するため、思い通りに機能しません。

4

4 に答える 4

0

1 つの改行 + ( 改行以外の文字 + 改行 ) の繰り返し

/\n(?:[^\n]+\n)+/
于 2013-10-18T11:53:38.220 に答える
0

空白行の先読みで分割:

String[] sets = input.split("(?m)(?=$\\s^$)");

「複数行」の正規表現スイッチ(?m)を使用すると、^ と $ が行の開始/終了に一致し\s、改行に一致するように使用することで、これが unix、mac、および windows ファイルの両方で機能することを意味します。

これにより空白行が保持されますが、行だけが必要な場合は、正規表現を変更して先読みを削除します(?m)$\\s^$

于 2013-10-18T11:34:28.387 に答える
0

正規表現でテストすると、次のように正しい結果が得られるようです。あなたの例のように、最初の空の行をキャプチャしています。dotall (/s) スイッチを使用してブロック全体を選択できるようにし、遅延一致 (+?) を使用してブロックが最後まで実行されないようにすることに注意してください。

/\b.+?(?=\r\r)/gs

環境によっては、正しい改行文字を使用する必要があると思います。

于 2013-10-18T11:41:14.043 に答える