我难以正确使用正则表达式。
我用这个链接来检测体重: 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克)效果很好
药物c(如果需要,有时15克)可以帮助(有时10克)
所有这些都被检测到,但会将所有文本着色到括号后的行尾。我无法得到一个不会被染色的括号,这应该是好的。
答案 0 :(得分:1)
您没有指定是否接受小数,但是从正则表达式中,我假设您允许使用逗号作为小数点的十进制数。
所以,我相信这个正则表达式会做你想要的:
"\\([^\\)]*\\d+(,\\d+)?\\s*(µg|mg|g|kg)[^\\)]*\\)"
答案 1 :(得分:0)
在你的正则表达式中,你的.*
过于贪婪,想吃尽可能多的角色。相反,你可以使用像[^)]*
这样的东西,它会尝试匹配所有不是)
符号的字符。