我很难弄清楚我的行刑。
我使用这个链接来检测体重:regex to get weight
这是一个只找到重量的术语,它起了作用:
([\d.]+)\s+(lbs?|oz|g|kg)我编写了一个Java方法,在html页面上对药物的剂量进行着色。如果包含至少一个权重指示,则应在括号中对所有文本进行着色。(例如,低于18: 5.5mg,超过18: 10毫克)目前,它有时会着色正确的部分,但大多数情况下,正则表达式得到太多或忽略括号-这些,这应该是彩色的。
当前的问题:正则表达式还包含结束括号后的每个单词--直到行尾。
我现在的准则是:
(\\(.[^\\(]*.\\d*\\,?\\d+)\\s?+(µg|mg|g|kg).*.\\)在这里,整个方法:
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;
}示例:
medicament b (under 18: 10 g, over 18: 15 g) works well
medicament c (sometimes 15g if needed) can help
(sometimes 10 g)所有这些都会被检测到,但是会在括号之后将所有文本颜色显示到行的末尾。我没有办法得到一个不会被着色的括号,这应该是好的。
发布于 2016-06-09 23:19:47
您没有指定是否接受小数,但从正则表达式中,我假设您允许以逗号作为小数点。
所以,我相信这个regex会做你想要的:
"\\([^\\)]*\\d+(,\\d+)?\\s*(µg|mg|g|kg)[^\\)]*\\)"发布于 2016-06-09 23:16:21
在你的正则表达式中,你的.*太贪婪了,想吃尽可能多的字符。相反,您可以使用像[^)]*这样的东西,它将尝试匹配所有不是)符号的字符。
https://stackoverflow.com/questions/37736317
复制相似问题