2016-06-09 50 views
1

我在正確獲取我的正則表達式時遇到了困難。正則表達式來檢測包含重量的括號

我用這個鏈接,用於檢測重量: regex to get weight

這是術語,只找到了重量,這工作:

([\d.]+)\s+(lbs?|oz|g|kg) 

我寫了一個Java的方法顏色的用量在html頁面上的藥物。如果它至少包含一個重量指示,它應該爲括號中的所有文字着色。 (例如低於18:5.5mg,高於18:10mg) 目前它有時會着色右邊的部分,但大多數時候正則表達式會忽略或忽略一個圓括號,應該着色。

當前問題:正則表達式還包含關閉括號後的每個單詞,直到行尾。

這裏我的當前正則表達式:。?

(\([^ \(] \ d \,\ d +)\ S +(微克|毫克| G |千克)*。 \)

這裏整個方法:

private static String addDosageHighlight(String htmltext) { 

    String dosage =""; 
    Pattern pattern = Pattern.compile("(\\(.[^\\(]*.\\d*\\,?\\d+)\\s?+(µg|mg|g|kg).*.\\)"); 
    Matcher matcher = pattern.matcher(htmltext); 
    // Check all occurrences 
    if (matcher.find()) { 
     dosage = matcher.group(); 
     htmltext = htmltext.replace(dosage, "<span style=\"color:magenta;\">" + dosage +"</span>"); 
    } 
    return htmltext; 
} 

實例: 藥物b(未滿18 10克,在18:15 G)工作良好

藥物C(如果需要的話有時15克)可以幫助

(有時10克)

這些都得到檢測,但將顏色的所有文本,直到行末,括號之後。我無法設法得到一個不會被着色的應該是好的括號。

+0

格式的代碼更好。什麼是'文本' – Falmarri

+3

您沒有顯示任何想要捕獲的文本示例,以及哪些情況失敗,哪些成功。 – rrauenza

+0

當希臘mu不可用時,通用的縮寫爲*** mcg ***。還有一些劑量在IU中。 –

回答

1

您沒有指定是否接受小數,但是從您的正則表達式中,我假設您允許使用逗號作爲小數點的十進制數。

所以,我認爲,這正則表達式會做你在找什麼:

"\\([^\\)]*\\d+(,\\d+)?\\s*(µg|mg|g|kg)[^\\)]*\\)" 
+0

仍然有同樣的問題。現在唯一的區別是,如果有第二個右括號,它會在那裏結束。 例如: 「t(es)(etafda e 25,5 mg)tadfasfea(afdwe)fda」 – Nice1

+0

我用你的例子得到這個輸出結果:'t(es)( etafda e 25,5 mg) tadfasfea(afdwe)fda'。什麼是預期的輸出? –

+0

它應該是「(etafda e 25,5 mg)」 我得到「(etafda e 25,5 mg)tadfasfea(afdwe)」 – Nice1

0

在你的正則表達式中,你的.*太貪婪了,想吃盡可能多的字符。相反,您可以使用類似[^)]*這將嘗試匹配不是)符號的所有字符。

相關問題