我怎样才能让我的正则表达式接受第一个匹配项,并忽略任何后续匹配项?
How can I get my Regular Expression to take the first match, and ignore any following matches?
我正在制作正则表达式以从药品目录中提取剂量说明。我从许多不同的品牌获取信息,即使在一个品牌内,格式也不一致,所以我的表达必须有点宽容。正则表达式正在 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粒,分次服用,饭前服用。"
-- 我得到 dosage_amount= 1-3, dosage_format= capsule, dosage_frequency=每天一次,并且dosage_permutation="in divided doses, before a meal".
但是,我遇到了以下描述的问题:
"路线:
对于成人,每天服用一 (1) 片,最好随餐服用或遵照医疗保健专业人员的建议。吞咽前让药片在舌头上溶解。提醒一下,与您的医疗保健提供者讨论您服用的补充剂和药物。 "
问题在于 "take" 这个词在描述中被多次使用。我会得到dosage_amount=和,以及dosage_format=你的。 (它匹配第二个 'take',而不是第一个。)
有没有办法强制正则表达式只匹配描述中的第一个 'take'?我已经尝试过按照概述 here 使它变得贪婪与非贪婪,但我无法让它工作。
谢谢。
尝试把贪心的部分换成这里:
.*take
非贪婪版本:
.*?take
第一个变体使用尽可能多的字符,第二个变体尽可能少。
我正在制作正则表达式以从药品目录中提取剂量说明。我从许多不同的品牌获取信息,即使在一个品牌内,格式也不一致,所以我的表达必须有点宽容。正则表达式正在 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粒,分次服用,饭前服用。"
-- 我得到 dosage_amount= 1-3, dosage_format= capsule, dosage_frequency=每天一次,并且dosage_permutation="in divided doses, before a meal".
但是,我遇到了以下描述的问题:
"路线: 对于成人,每天服用一 (1) 片,最好随餐服用或遵照医疗保健专业人员的建议。吞咽前让药片在舌头上溶解。提醒一下,与您的医疗保健提供者讨论您服用的补充剂和药物。 "
问题在于 "take" 这个词在描述中被多次使用。我会得到dosage_amount=和,以及dosage_format=你的。 (它匹配第二个 'take',而不是第一个。)
有没有办法强制正则表达式只匹配描述中的第一个 'take'?我已经尝试过按照概述 here 使它变得贪婪与非贪婪,但我无法让它工作。
谢谢。
尝试把贪心的部分换成这里:
.*take
非贪婪版本:
.*?take
第一个变体使用尽可能多的字符,第二个变体尽可能少。