You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.NET中如何用正则函数提取字符串的主组与子组数据

VB.NET提取嵌套括号中的主组与子组解决方案

你的问题核心是原正则无法处理多层嵌套括号的结构,以下是具体解决步骤:

问题分析

原正则(\w+)\((\d+)\)仅能匹配"单词+(数字)"的直接结构,但目标字符串中主组(如abc/def)与数字子组之间存在多层嵌套括号,因此需要先分离主组及其对应的括号区域,再从中提取数字子组。

解决方案1:非贪婪匹配快速实现

先匹配每个主组及其关联的内部内容,再从内容中提取所有数字子组:

VB.NET代码示例

Dim input As String = "(abc())(def((123)(456))(klm((123))"
' 匹配主组及其内部内容:(主组(内部内容)
Dim mainRegex As New Regex("\((\w+)\((.*?)(?=\)(?:\(|$))", RegexOptions.Singleline)

Dim matchCount As Integer = 1
For Each mainMatch As Match In mainRegex.Matches(input)
    Dim mainGroupVal As String = mainMatch.Groups(1).Value
    Console.WriteLine($"Match {matchCount} : {mainGroupVal}")
    
    ' 从内部内容中提取所有数字子组
    Dim subRegex As New Regex("\d+")
    Dim subMatchCount As Integer = 1
    For Each subMatch As Match In subRegex.Matches(mainMatch.Groups(2).Value)
        Console.WriteLine($"子组{subMatchCount}:{subMatch.Value}")
        subMatchCount += 1
    Next
    matchCount += 1
Next

解决方案2:平衡组精准处理嵌套括号

如果需要更严谨地处理嵌套括号(避免非贪婪匹配可能的边界错误),可以使用.NET正则支持的平衡组来匹配括号平衡的内容:

VB.NET代码示例

Dim input As String = "(abc())(def((123)(456))(klm((123))"
' 平衡组正则:匹配主组及括号平衡的内部内容
Dim mainRegex As New Regex("\((\w+)\((?>[^()]+|\((?<depth>)|\)(?<-depth>))*(?(depth)(?!))", RegexOptions.Singleline)

Dim matchCount As Integer = 1
For Each mainMatch As Match In mainRegex.Matches(input)
    Dim mainGroupVal As String = mainMatch.Groups(1).Value
    Console.WriteLine($"Match {matchCount} : {mainGroupVal}")
    
    ' 提取所有数字子组
    Dim subRegex As New Regex("\d+")
    Dim subMatchCount As Integer = 1
    For Each subMatch As Match In subRegex.Matches(mainMatch.Value)
        Console.WriteLine($"子组{subMatchCount}:{subMatch.Value}")
        subMatchCount += 1
    Next
    matchCount += 1
Next

平衡组正则说明

  • (?<depth>):遇到左括号时,增加深度计数器
  • (?<-depth>):遇到右括号时,减少深度计数器
  • (?(depth)(?!)):如果深度计数器不为0,则匹配失败,确保括号完全平衡

内容的提问来源于stack exchange,提问作者Ranga

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 08:19:54