2

次の入力文字列を考慮してください。

X=Y
Z=U
Q=P

Lorem Ipsum は、印刷および植字業界の単なるダミー テキストです。
Lorem Ipsum は、1500 年代以来、業界標準のダミー テキストでした。

正規表現ワンライナーで以下をキャプチャできるかどうか疑問に思っています:

: X
: Y
: Z
: U
: Q
: P

テキスト: Lorem Ipsum は、印刷および植字
業界の単なるダミー テキストです。
Lorem Ipsum は、1500 年代以来、業界標準のダミー テキストでした。

アイデアは、特定の形式の後に「\r\n」が続き、その後にいくつかのテキストがある一連の行があるということです。各キーと値のペア (この例) とテキストを個別にキャプチャしたいと考えています。

構造化データのキャプチャは非常に簡単です (ここでは例を示します)。

(?:^(?<left>\S+)=(?<right>\S)\n)

しかし、次のようなものを指定する方法がわかりません。

「最初の空行までこのパターンをキャプチャし続け、その後すべてを取得して「テキスト」にキャプチャします。

コードを使用してこの問題を解決するのは簡単ですが、正規表現のワンライナーだけでそれが可能かどうかを知りたいと思っています。

4

1 に答える 1

2

はい、.NET (およびそこでのみ) では、キャプチャ グループを繰り返し、各繰り返しからキャプチャを取得できます。

^               # anchor pattern to the beginning of the string
(?:             # non-capturing group for a single x=y line
  (?<left>\S+)  # match and capture left-hand side
  =
  (?<right>\S+) # match and capture right-hand side
  \n
)+              # repeat
\n              
(?<text>.*)     # match the remainder of the string
$               # anchor pattern to the end of the string (not really necessary)

とを必ず使用してRegexOptions.IgnorePatternWhitespaceくださいRegexOptions.Singleline

Matchオブジェクトが と呼ばれる場合m、次のものを取得できます。

m.Groups["left"].Captures  // for a list of all left-hand sides
m.Groups["right"].Captures // for a list of all right-hand sides
m.Groups["text"].Value     // for the remainder of the string
于 2013-08-15T09:39:01.883 に答える