2016-06-09 115 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

在你的正则表达式中,你的.*太贪婪了,想吃尽可能多的字符。相反,您可以使用类似[^)]*这将尝试匹配不是)符号的所有字符。