C#Regex:获取子捕获?

mpe*_*pen 3 c# regex

我有一个正则表达式......

internal static readonly Regex _parseSelector = new Regex(@"
    (?<tag>" + _namePattern + @")?
    (?:\.(?<class>" + _namePattern + @"))*
    (?:\#(?<id>" + _namePattern + @"))*
    (?<attr>\[\s*
        (?<name>" + _namePattern + @")\s*
        (?:
            (?<op>[|*~$!^%<>]?=|[<>])\s*
            (?<quote>['""]?)
                (?<value>.*?)
            (?<!\\)\k<quote>\s*
        )?
    \])*
    (?::(?<pseudo>" + _namePattern + @"))*
", RegexOptions.IgnorePatternWhitespace);
Run Code Online (Sandbox Code Playgroud)

为此我抓住了匹配对象......

var m = _parseSelector.Match("tag.class1.class2#id[attr1=val1][attr2=\"val2\"][attr3]:pseudo");
Run Code Online (Sandbox Code Playgroud)

现在有办法做类似的事m.Group["attr"]["name"]吗?或者以某种方式获取attr组内的组?

Mar*_*ers 5

组名不嵌套在正则表达式中 - 它是一个扁平结构.你可以使用这个:

m.Group["name"]
Run Code Online (Sandbox Code Playgroud)

  • 我认为你正在推动在一个正则表达式中做的事情的极限.你能先用正则表达式提取属性,然后使用第二个正则表达式进一步解析它们的组件吗?或许您可以使用解析库. (2认同)