我正在尝试查找/确定字符串是否包含不包含在圆括号“()”中的字符“-”。

我已经尝试过正则表达式[^\(]*-[^\)]*
但它不起作用。

例子:

  • 100 - 200 mg->应该匹配,因为“-”不在圆括号内。
  • 100 (+/-) units->不应该匹配
  • 最佳答案

    您必须使用正则表达式吗?您可以尝试仅遍历字符串并跟踪范围,如下所示:

    public boolean HasScopedDash(String str)
    {
        int scope = 0;
        boolean foundInScope = false;
        for (int i = 0; i < str.length(); i++)
        {
            char c = str.charAt(i);
            if (c == '(')
                scope++;
            else if (c == '-')
                foundInScope = scope != 0;
            else if (c == ')' && scope > 0)
            {
                if (foundInScope)
                    return true;
                scope--;
            }
        }
        return false;
    }
    

    编辑:如评论中所述,可能希望排除破折号在圆括号后但没有圆括号的情况。 (即“abc(2-xyz”)上面的代码对此进行了解释。

    10-06 12:39