如何让我的正则表达式参加第一场比赛,并忽略以下任何比赛?

时间:2015-07-20 19:16:38

标签: regex rubular

我正在制作正则表达式,以从药品目录中提取剂量说明。我从许多不同的品牌获得信息,即使在一个品牌中,格式也不一致,所以我的表达必须有点宽容。正则表达式正在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试图让它变得贪婪而非贪婪,但我不能让它发挥作用。

谢谢。

1 个答案:

答案 0 :(得分:0)

尝试在此替换贪婪的部分:

.*take

非贪婪版:

.*?take

第一个变体消耗尽可能多的字符,第二个尽可能少。