当前位置: 首页 > 知识库问答 >
问题:

如何忽略重复的正则表达式模式[duplicate]

祁和通
2023-03-14

我不知道如何表达这个问题的标题,但想象一下我有以下字符串:

(1,2)、(3,(4))

我想要一个正则表达式,它允许我获得1,23,(4)

我目前拥有的正则表达式是\\([^)]*)\\

这个正则表达式的问题是,它得到了1,23,(4。这是因为它与(4)的括号匹配。但我需要一个正则表达式,它忽略4的括号,只匹配外部的,如果这有意义的话。

编辑:为了更深入地了解这个问题,这正是我所期望的字符串类型:(STRING1,STRING2), ,其中 string是一个随机字符字符串(它可以有字母、数字、空格和其他随机符号)。由于它有随机字符,字符串本身可以有括号,这将触发正则表达式。我基本上需要跟踪发现的每个括号,我可以忽略和其他开括号匹配的闭括号。


共有1个答案

须志新
2023-03-14

注:在此期间,此问题已(正确)作为副本关闭。下面是一个有点幼稚,当然也不是完美的java算法实现,它非常类似于这个答案中提出的一个算法,这个答案与链接副本的公认答案相关联。

如果你只对最外层的配对偏执狂感兴趣,这样的东西可能会做:

public static void main(String[] args) {                    

    String s = "(1,2),(3,(4))";
    
    ArrayList<String> matches = new ArrayList<>();
    
    int depth = 0;
    int startIndex = 0;
    int i = 0;
    
    for (char c : s.toCharArray()) {
        if (c == '(') {
            if (depth == 0) {
                startIndex = i;
            }
            depth++;
        }
        if (c == ')') {
            depth--;
            if (depth == 0) {
                matches.add(s.substring(startIndex+1, i));
            }
        }
        i++;
    }
    System.out.println(matches.size());
    System.out.println(matches);
}

请注意,此代码不处理输入中包含的结束语多于开始语的情况,深度仅为负值。您可能需要为这些情况添加sytax错误处理(我相信还有其他情况)。

 类似资料:
  • 如何在不包含连续子字符串baa的字母表{a,b,c}上表达正则表达式?

  • 我正在尝试在文本中查找html标签,如下所示: 但是颜色部分可以改变(比如#bbbbbb)…我想我可以为此使用正则表达式,对吗?但是我不确定我怎么能忽略它的颜色部分… 你能帮我吗?这可能吗? 非常感谢你

  • 我正在尝试使用python中的正则表达式。我构建了正则表达式,如下所示。我知道用于匹配搜索字符串的开头。我已使用包含多个的匹配模式构建框架,但我不确定将如何尝试匹配搜索字符串中的模式。 我预计会引发错误,关于无效的正则表达式,但它不会引发任何错误,也不会返回任何匹配项。 所以,我的问题是或是有效的正则表达式吗?

  • 我需要编写一个具有以下规则的正则表达式: null null 这些示例无效: > 12--11(因为它包含两个连字符) 1-2345(因为它包含5号) <>是字符出现在最后一个位置,那么在字符之前必须有一个数字not hypen。 即11-A(必须不及格)11-1A(必须及格)

  • 我是正则表达式的初学者,并尝试搜索特定的数字模式。以下数据以 XML 格式嵌入。 要求是提取数据(最里面的列表)。在这个例子中,数据从24779开始到24760。注意:每次数据可能不是从“24”开始。因此,我计划通过以下逻辑提取:如果标签名(在本例中:DUT_1_PC)具有非零的有效数据,并且有效数据的计数大于100,用逗号分隔,则提取该列表及其标签名(DUT_1_PC)。 我无法提取所需的数据。