固有表現抽出の出来るLUISとかを使えば、日本円での金額表記を簡単に抽出出来るかなーと思ったらprebuildのentityでは○○円という表現しつか抽出できなかった。
LUISのUIが一新され、Prebuilt entityが日本語も認識するようになった件 - Qiita
正規表現サンプル集を参考にした
$ irb str = 'この文章内にある金額表現を抽出したいです¥1,000、1000円、1,000円ほげ、1,000、1,000,000円、、、¥1,000,000、10,0,11。。1000000、123456789、,100'
カンマ付きの金額のみ抽出する
irb(main):072:0> str.scan(/\d{1,3}(?:,\d{3})+/) => ["1,000", "1,000", "1,000", "1,000,000", "1,000,000"]
カンマ付き、カンマなしを含め全て抽出する
str.scan(/\d{1,3}(?:,\d{3})+|\d+/) => ["1,000", "1000", "1,000", "1,000", "1,000,000", "1,000,000", "10", "0", "11", "1000000", "123456789", "100"]
補足
#scan
で抽出する際、正規表現のグループ化()
を使用すると、キャプチャされてしまって戻り値が期待しているのと違う形になってしまう(カンマの右側だけキャプチャされる)。
irb(main):077:0> str.scan(/\d{1,3}(,\d{3})+/) => [[",000"], [",000"], [",000"], [",000"], [",000"]]
今回はマッチするところを全て抽出したかったので、キャプチャなしのグループ化(?: pattern)
を使うことで解決してます。