dogwood008の開発メモ!

最近のマイブームは機械学習, Ruby on Rails。中でも機械学習を使った金融商品の自動取引に興味があります。

【正規表現】文字列の塊の否定は?と!でできる

要旨

 (?!.+否定文字列.+)

詳細

下記のようなテスト対象があったとする。このうち、「それぞれの天気を取り出したい。ただし、豪雨の場合は取り出してはならない。」という課題があったとしよう。

今日は雨だった。
今日は豪雨だった。
今日は晴れだった。

この時、次のような正規表現を使うと、目的が達せられる。

/今日は(?<weather>(?!豪).+)だった。/gm

これは、「『今日は』という文字の後」に「1文字以上の文字列が有ればそれをweatherという名前を付けたグループにする、ただし、豪という文字で始まってはいけない」という解釈になる。

上記では名前付きグループを使用しているため、「雨」「晴れ」というように天気をグループで取得できる。

regex101.com

「豪」と言う文字を含まない文章の天気を抽出する正規表現
「豪」と言う文字を含まない文章の天気を抽出する正規表現

抽出された名前付きグループで、天気を取得できる
抽出された名前付きグループで、天気を取得できる

この使い方は Negative Lookahead 「否定先読み」と呼ばれる。

参考

ja.javascript.info