2017-12-14 3 views
2

私はバナナの値を取得できるように正規表現を書こうとしていました。したがって、このテキストのリストが与えられています。Regexはデリミタの後に値を取得します

本質的に、各行について、banana=の後ろにあるものを取得し、それがある場合は|で停止するようにしたいと考えています。

apple=1|banana=2.5|oranges=1 
banana=2.5|apple=1|oranges=1 
apple=1|oranges=1|banana=2.5 
apple=1|oranges=1|banana=-2.5 
banana=2.5 

私は限り(?i)banana=(.*)を書くようになったが、もちろん、それは完全に一致した後、すべてを取得します。

皆さんは解決策がありますか?

ありがとうございます!

答えて

3

banana=の後ろにあるものを取得し、それがある場合は|で停止するようにしたいと考えています。

あなたは代わりに貪欲なドットパターンの否定文字クラスを使用することがあります。

(?i)banana=([^|]*) 

regex demo

貪欲ドット、.*は、改行文字以外の任意の0+文字に一致するを参照してください。 (NFAエンジンでは)可能な限り多く(通常、行の最後まで)。

ネガティブ文字クラス[^|]を使用すると、|以外の任意の文字に一致します。

パターンは

  • (?i)を詳細 - 大文字と小文字を区別しない修飾子
  • banana= - リテラルストリング(単語全体として一致するように\bとプリペンド)
  • ([^|]*) - キャプチャグループ1:任意の0 + |以外の文字(空の一致を避けるには、*+の量指定子に置き換えます)。
+1

詳細な説明をありがとうございました。また、regex101サイトは非常に役立つようです。ありがとうございました! –

+0

完了!ありがとうございました :) –

関連する問題