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

捕获外部paren组而忽略内部paren组

杭泉
2023-03-14

我正在使用C#和regex,试图捕获外部的paren组,同时忽略内部的paren组。我有遗留生成的文本文件,其中包含数千个字符串构造,如下所示:

([txtData] of COMPOSITE
(dirty FALSE)
(composite [txtModel])
(view [star3])
(creationIndex 0)
(creationProps )
(instanceNameSpecified FALSE)
(containsObject nil)
(sName txtData)
(txtDynamic FALSE)
(txtSubComposites )
(txtSubObjects )
(txtSubConnections )
)

([txtUI] of COMPOSITE
(dirty FALSE)
(composite [txtModel])
(view [star2])
(creationIndex 0)
(creationProps )
(instanceNameSpecified FALSE)
(containsObject nil)
(sName ApplicationWindow)
(txtDynamic FALSE)
(txtSubComposites )
(txtSubObjects )
(txtSubConnections )
)

([star38] of COMPOSITE
(dirty FALSE)
(composite [txtUI])
(view [star39])
(creationIndex 26)
(creationProps composite [txtUI] sName Bestellblatt)
(instanceNameSpecified TRUE)
(containsObject COMPOSITE)
(sName Bestellblatt)
(txtDynamic FALSE)
(txtSubComposites )
(txtSubObjects )
(txtSubConnections )
)
Regex regex = new Regex(@"\((.*?)\)");
return regex.Matches(str);
    null

共有1个答案

单琛
2023-03-14

你可以通过平衡群体来实现。

下面是一个匹配外括号的演示。

string sentence = @"([txtData] of COM ..."; // your text

string pattern = @"\((?>\((?<c>)|[^()]+|\)(?<-c>))*(?(c)(?!))\)";
Regex rgx = new Regex(pattern);

foreach (Match match in rgx.Matches(sentence))
{
    Console.WriteLine(match.Value);
    Console.WriteLine("--------");
}
 类似资料:
  • 这是我前面的SO问题的一个排列。这个答案对我来说非常有效,直到我遇到了一个导致问题的边缘案例。我现在需要一个调整的正则表达式模式。我试着在Regex Storm上自己解决这个问题,但是我对Regex的了解还不够深入。 与我上一篇文章(链接在上面)的一个变化是,我现在只对匹配以开头的paren分组感兴趣,而不是仅仅以开头。分组的结尾保持不变: 我正在使用C#和regex,试图捕获外部的paren组,

  • 问题内容: 关于使用/的最佳实践,我有一个非常基本的问题。我有一个像这样的简单函数(DAO) 并在Web服务中使用DAO功能: OR最好在DAO函数中使用/,如下所示: 问题答案: 没有完美的规则。 如果需要尽早但尽可能晚地捕获异常,通常代码会更清晰,更简单。 您应该考虑在发生这种情况时谁必须采取行动,这决定了您是在方法(addVehicle)内进行操作还是调用方必须执行该操作。 例如: 在此示例

  • 我定义的正则表达式对所有测试字符串都很好,除了当捕获组顺序被交换时(2016 Fall或16F或18SU),正则表达式中是否有一种方法可以忽略正则表达式的捕获组顺序

  • 使用上面的代码片段,是否可以测试忽略调用IgnoreCall的方法。ignoreMethod(Bean)而不需要将整个语句置于布尔条件下? 以下是单元测试代码片段: 注意事项: 重构。即使是糟糕的OO设计,重构也是代价高昂的 方法签名被锁定,除非另一个模式适用于替换 尝试使用Mockito。当和PowerMockito时。在目标静态方法上执行时,存根在运行时调试上不起作用

  • 问题内容: 在同一个数据中心中,我有一个应用程序服务器(客户端),该服务器连接到包含3个节点的沙发基础集群。 我希望客户端通过内部IP而不是外部IP连接以优化性能。假设这些是我的IP: node1InternalIP / node1ExternalIP node2InternalIP / node2ExternalIP node3InternalIP / node3ExternalIP 当创建我的

  • 问题内容: 在下面显示的代码片段中,内部类本身继承了外部类。 方法中的唯一语句(最后一个片段)将值分配给类的私有字段,然后调用该方法。 该方法会导致另一个字符串- 要设置的私人领域中的类调用之前的方法延长。 因此,方法中的以下两个语句: 应该显示 另一个价值 另一个价值 但是他们显示 初始值 初始值 为什么会这样? 问题答案: 方法和领域都是。因此,其他子类(包括子类)均无法访问它们。它们不是继承