5

次の形式の文字列があります

Foo
"Foo"
"Some Foo"
"Some Foo and more"

Foo引用符で囲まれ、任意の数の英数字と空白文字で囲むことができる値を抽出する必要があります。したがって、上記の例では、出力を次のようにしたいと思います

<NoMatch>
Foo
Foo
Foo

私はこれを機能させようとしてきましたが、これは私がこれまでに引用符に先読み/後読みを使用したパターンです。これは機能し"Foo"ますが、他の人には機能しません。

(?<=")Foo(?=")

これをさらに拡張して

(?<=")(?<=.*?)Foo(?=.*?)(?=")

動作しません。

任意の支援をいただければ幸いです!

4

4 に答える 4

10

引用符のバランスが正しく、引用符で囲まれた文字列が複数の行にまたがっていない場合は、文字列を先読みして、偶数の引用符が続くかどうかを確認できます。そうでない場合は、引用符で囲まれた文字列の中にいることがわかります。

Foo(?![^"\r\n]*(?:"[^"\r\n]*"[^"\r\n]*)*$)

説明:

Foo          # Match Foo
(?!          # only if the following can't be matched here:
 [^"\r\n]*   # Any number of characters except quotes or newlines
 (?:         # followed by
  "[^"\r\n]* # (a quote and any number of non-quotes/newlines
  "[^"\r\n]* # twice)
 )*          # any number of times.
 $           # End of the line
)            # End of lookahead assertion

regex101.comで実際にご覧ください

于 2013-05-24T11:07:54.200 に答える