我正在制作正则表达式,以从药品目录中提取剂量说明。我从许多不同的品牌获得信息,即使在一个品牌中,格式也不一致,所以我的表达必须有点宽容。正则表达式正在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-3粒,分次服用。”
- 我剂量_数量= 1-3 ,剂量_格式=胶囊, dose_frequency =每天一次,剂量_计量=“分开的剂量,饭前”。
但是,我遇到的问题包括:
“路线: 对于成年人,每天服用一(1)片,最好是用餐或遵循医疗保健专业人员的建议。在吞咽之前让片剂溶解在舌头上。作为提醒,请与您的医疗保健提供者讨论您服用的补充剂和药物。“
问题是在描述中多次使用“take”一词。我会得到 dose_amount = , dose_format =你的。 (它匹配第二个'take',而不是第一个。)
有没有办法强制正则表达式只匹配描述中的第一个“take”?我按照概述here试图让它变得贪婪而非贪婪,但我不能让它发挥作用。
谢谢。
答案 0 :(得分:0)
尝试在此替换贪婪的部分:
.*take
非贪婪版:
.*?take
第一个变体消耗尽可能多的字符,第二个尽可能少。