0

医薬品カタログから投薬指示を抽出する正規表現を作成しています。いろいろなブランドから情報をいただいているのですが、同じブランドでもフォーマットが統一されていないので、表現はやや甘めにしています。正規表現は Ruby で実装されています (ただし、私は実装していません)。

私の正規表現は次のとおりです。

/(take|chew\s|usage:|use:|intake:|dosage:?|dose:|directions:|recommendations:|adults:)\s*(.*take\s+|.*chew\s+|.*mix\s+|.*supplement,\s+)?(?<dosage_amount>\S+(\sto\s\S+)?(\sor\s\S+)?(\s\(\d+\)\s)?\b)[\s,](?<dosage_format>\S+\b(\s\([\w\-\.]+\))?)?[\s,]*?(?<dosage_frequency>[\S\s]*(daily|per day|a day|needed|morning|evening))?[\s,]?\s?(daily\s)?(?<dosage_permutation>(with|on|at|in|before|after|taken)[,\w\s\-]*)?(?=or as|\.)?/

正しく動作するコードの例は、次の説明にあります --

"推奨される使用方法: 栄養補助食品として、1 日 1 ~ 3 カプセルを食事の前に分割して服用してください。 "

-- ここで、dose_amount= 1-3dose_format= カプセルdose_frequency= 1 日 1 回、およびdose_permutation= 「分割用量で、食事の前に」を取得します。

ただし、次のような説明で問題が発生しています。

用法: 成人は、できれば食事と一緒に 1 日 1 錠を服用するか、医療専門家のアドバイスに従ってください。飲み込む前に、錠剤を舌の上で溶かしてください。忘れないように、服用するサプリメントや薬については、健康担当者と相談してください。ケアプロバイダー。

問題は、説明の中で「取る」という言葉が複数回使用されているところです。dose_mount= with、およびdose_format= yourを取得します。(最初のものではなく、2 番目の「テイク」に一致します。)

正規表現を説明の最初の「取得」のみに一致させる方法はありますか? hereで概説されているように、貪欲と非貪欲を試してみましたが、機能させることはできません。

ありがとうございました。

4

1 に答える 1

0

ここで貪欲な部分を置き換えてみてください:

.*take

非貪欲なバージョンで:

.*?take

最初のバリアントはできるだけ多くの文字を消費し、2 番目のバリアントはできるだけ少なくします。

于 2015-07-20T19:34:00.313 に答える