1

入力文字列は「bla bla 1:term1 bla bla 2:term2 bla bla 3:term3 bla bla」です。この文字列ではすべての単語がオプションであり、表示されない場合があります。

term1、term2、term3 の名前付きグループを取得したいと考えています。私は成功なしでこの正規表現を試しました:

"(\b1:(?P<one>\w+))?.*?(\b2:(?P<two>\w+))?.*?(\b3:(?P<three>\w+))?"

? を削除すると実際に機能します 各外側のグループの後に、すべてのグループが文字列に存在します。しかし、私はそれらをオプションにすることに失敗しました。助けていただければ幸いです

4

1 に答える 1

0

次の単語をキャプチャしたい:ので、それ:(\w+)を行います:

$ egrep -o ":(\w+)" <<< "bla bla 1:term1 bla bla 2:term2 bla bla 3:term3 bla bla"
:term1
:term2
:term3

キャプチャ グループ 1 にはterm1、 、2などが含まれterm2ます。

前向きな先読みにも興味があるかもしれません:

$ grep -Po "(?<=:)\w+" <<< "bla bla 1:term1 bla bla 2:term2 bla bla 3:term3 bla"
term1
term2
term3
于 2013-01-22T11:10:55.630 に答える