从模式匹配中提取变量

Extract variables from pattern matching

我不是匹配模式专家,我已经为此工作了几个小时,但没有机会:/

我有一个这样的输入字符串:

Dim text As String = "32 Barcelona {GM C} 2 {*** Some ""cool"" text here}"

我只想提取 3 个东西:

  1. 巴塞罗那
  2. GM C
  3. *** 此处有一些 "cool" 文本

我正在尝试的模式是这样的:

Dim pattern As String = "^32\s(?<city>[^]].*\s)\{(?<titles>.*\})*"

Dim m As Match = Regex.Match(text, pattern)

If (m.Success) Then

    Dim group1 As Group = m.Groups.Item("city")
    Dim group2 As Group = m.Groups.Item("titles")

    If group1.Success Then
        MsgBox("City:" + group1.Value + ":", MsgBoxStyle.Information)   
    End If

    If group2.Success Then
        MsgBox(group2.Value, MsgBoxStyle.Information)  
    End If
    Else
        MsgBox("fail")
    End If

但无论如何它都不起作用:( 提取这 3 个变量的模式应该是什么?

^\d*(?<City>[A-Z a-z0-9]*)\s*\{(?<Titles>[A-Z a-z0-9]*)\}.*?\{(?<Cool>.*?)\}$

似乎与您输入的示例匹配。

Expresso 是设计正则表达式的好工具。