java - 查找字符串中不在圆括号 "-"内的破折号 "()"

标签 java regex

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

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

示例:

  1. 100 - 200 mg -> 应匹配,因为“-”未括在圆括号中。
  2. 100 (+/-) 单位 -> 不应匹配

最佳答案

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

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”)上面编辑的代码说明了这一点。

关于java - 查找字符串中不在圆括号 "-"内的破折号 "()",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56139609/

相关文章:

php - 通过 RegExp 搜索 (Total Commander/PHP)

java - 我如何将此输入字符串转换为 BST(二叉搜索树)-JAVA?

java - Jetty 配置中使用类文件夹代替 jar

php - 替换文字星号 (*) ... 但仅在括​​号内

regex - R正则表达式 - 在括号之间拆分

python - Python中的正则表达式——关于一个具体案例

java - 生成 GWT 覆盖类型

java - 在java中使用cipher,如何使加密文件的长度为16的倍数?

java - 局部变量可能未初始化

R:如何让 grep 返回匹配项,而不是整个字符串