我正在制作正则表达式以从药品目录中提取剂量说明。我从许多不同的品牌中获取信息,即使在一个品牌内,格式也不一致,所以我的表达必须是宽容的。正则表达式是在 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 粒,分次服用,饭前服用。 "
- 我得到dose_amount= 1-3,dose_format= 胶囊,dose_frequency= 每天一次,和dose_permutation= "分剂量,饭前"。
但是,我遇到了以下描述的问题:
"使用说明:对于成人,每天服用一 (1) 片,最好随餐服用或遵照您的医疗保健专业人员的建议。吞咽前让片剂在舌头上溶解。提醒一下,请根据您的健康状况讨论您服用的补充剂和药物护理人员。 ”
问题是在描述中多次使用“take”这个词。我会得到dose_amount= with,和dose_format= your。(它匹配第二个'take',而不是第一个。)
有没有办法强制正则表达式只匹配描述中的第一个“take”?我已经尝试过将其设为贪婪与非贪婪,如此处所述,但我无法让它发挥作用。
谢谢你。