使用Regex解析括号内的内容

时间:2011-12-20 15:25:44

标签: regex vb.net

我确信这很简单,我可能会因为在我的个人资料中出现这个问题而感到尴尬,但我似乎无法正确使用此正则表达式。

我想从以下字符串的最后一组中提取数字:

  

属性[1] .Securitymeasures [14] .AdditionalSecurityType

所以我想要一个将返回 14

的正则表达式

我想出的正则表达式是:

\ [(\ d)+ \]

然而 - 比赛正在返回“[14]” - 包括括号,我不明白为什么。我用括号包围了\ d,这应该意味着这是我想要捕获的数据。

2 个答案:

答案 0 :(得分:2)

嗯,你的正则表达式实际上匹配

  1. 一个开口支架
  2. 一个或多个连续数字
  3. 结束括号
  4. 因此返回括号的事实是完全正确的。如果您调试以下

    Regex.Match("Properties[1].Securitymeasures[14].AdditionalSecurityType",
                @"\[(\d)+\]")
         .Groups[1]
         .Value // equals '1'
    

    你会看到\ d被捕获为一个组(毕竟你把它放在parens中)。

    您要做的是使用“正面观察”来指定您在括号后面找一个或多个数字。

    (?<=\[)\d+
    

    1. 匹配一个或多个连续数字
    2. 在开放式括号后立即出现
    3. 您可以使用正向前瞻来组合它,但如果要解析整数索引,那么您始终可以预期只有括号内的数字可以跳过前瞻。

答案 1 :(得分:2)

这应该有效:

(?<=\[)\d+(?=\])

(?=\])积极前瞻,匹配]

(?<=\[)正面观察,匹配[

Regexr