我正在制定正则表达式从药物目录中提取剂量说明书。我从很多不同的品牌获得信息,即使在品牌中,格式也不一致,所以我的表情必须宽容。正则表达式正在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 =帽苏雷,dosage_frequency每天=一次,dosage_permutation = “分开的剂量,餐前”。
但是,我得到的问题类似的描述:
“路线: 对于成年人来说,采取一(1)每天服药,最好随餐服用或遵循您的健康护理专业的建议让平板电脑作为提示,讨论您向医护人员提供的补充剂和药物“
问题是在说明中多次使用”take“这个词。我会得到dosage_amount =与,并dosage_format =您的。 (这是相匹配的第二个“走”,而不是第一个。)
有没有办法迫使正则表达式只匹配描述中的第一个“走”?我曾尝试与使它贪婪与非贪婪所概述here尝试,但我不能使它发挥作用。
谢谢。
请告诉我们你的企图使它非贪婪,因为我认为应该这样做。我们需要看看你的尝试,以便我们可以帮助你了解你出错的地方。 – Barmar
Sleafar的答案的工作 - 我试图让“采取”本身不贪婪,而不是之前的字符。谢谢。 – mudfaerie