2015-07-20 117 views
0

我正在制定正則表達式從藥物目錄中提取劑量說明書。我從很多不同的品牌獲得信息,即使在品牌中,格式也不一致,所以我的表情必須寬容。正則表達式正在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-3dosage_format =帽蘇雷dosage_frequency每天=一次,dosage_permutation = 「分開的劑量,餐前」

但是,我得到的問題類似的描述:

路線: 對於成年人來說,採取一(1)每天服藥,最好隨餐服用或遵循您的健康護理專業的建議讓平板電腦作爲提示,討論您向醫護人員提供的補充劑和藥物

問題是在說明中多次使用」take「這個詞。我會得到dosage_amount =與,並dosage_format =您的。 (這是相匹配的第二個「走」,而不是第一個。)

有沒有辦法迫使正則表達式只匹配描述中的第一個「走」?我曾嘗試與使它貪婪與非貪婪所概述here嘗試,但我不能使它發揮作用。

謝謝。

+0

請告訴我們你的企圖使它非貪婪,因爲我認爲應該這樣做。我們需要看看你的嘗試,以便我們可以幫助你瞭解你出錯的地方。 – Barmar

+0

Sleafar的答案的工作 - 我試圖讓「採取」本身不貪婪,而不是之前的字符。謝謝。 – mudfaerie

回答

0

這裏嘗試更換貪婪部分:

.*take 

與非貪婪版本:

.*?take 

第一個變種消耗盡可能多的字符可能的,第二儘可能少。