首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于检测包含权重的括号的Regex

用于检测包含权重的括号的Regex
EN

Stack Overflow用户
提问于 2016-06-09 21:15:46
回答 2查看 342关注 0票数 1

我很难弄清楚我的行刑。

我使用这个链接来检测体重:regex to get weight

这是一个只找到重量的术语,它起了作用:

代码语言:javascript
复制
([\d.]+)\s+(lbs?|oz|g|kg)

我编写了一个Java方法,在html页面上对药物的剂量进行着色。如果包含至少一个权重指示,则应在括号中对所有文本进行着色。(例如,低于18: 5.5mg,超过18: 10毫克)目前,它有时会着色正确的部分,但大多数情况下,正则表达式得到太多或忽略括号-这些,这应该是彩色的。

当前的问题:正则表达式还包含结束括号后的每个单词--直到行尾。

我现在的准则是:

代码语言:javascript
复制
(\\(.[^\\(]*.\\d*\\,?\\d+)\\s?+(µg|mg|g|kg).*.\\)

在这里,整个方法:

代码语言:javascript
复制
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;
}

示例:

代码语言:javascript
复制
medicament b (under 18: 10 g, over 18: 15 g) works well

medicament c (sometimes 15g if needed) can help

(sometimes 10 g)

所有这些都会被检测到,但是会在括号之后将所有文本颜色显示到行的末尾。我没有办法得到一个不会被着色的括号,这应该是好的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-09 23:19:47

您没有指定是否接受小数,但从正则表达式中,我假设您允许以逗号作为小数点。

所以,我相信这个regex会做你想要的:

代码语言:javascript
复制
"\\([^\\)]*\\d+(,\\d+)?\\s*(µg|mg|g|kg)[^\\)]*\\)"
票数 1
EN

Stack Overflow用户

发布于 2016-06-09 23:16:21

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37736317

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档