C#Regex匹配枚举体型

时间:2010-06-29 11:05:23

标签: c# regex enums

我在文件中有这个枚举:

public enum IdentityState
{
    [EnumMember]
    New = 0,
    [EnumMember]
    Normal = 1,
    [EnumMember]
    Disabled = 2
}

{ some other data... }

并且只想匹配此枚举的主体({}之间), 我想要的匹配结果是:

{
    [EnumMember]
    New = 0,
    [EnumMember]
    Normal = 1,
    [EnumMember]
    Disabled = 2
}

我像这样制作正则表达式:

public enum.*\w.*(?<enumBody>[\S|\s|]+\}{1})

但结果如下:

{
    [EnumMember]
    New = 0,
    [EnumMember]
    Normal = 1,
    [EnumMember]
    Disabled = 2
}

{ some other data... }

这不是我所期望的,因为它还包括我不想要的下一个{ some other data }字符串。我不知道如何在第一次}之后停止制作模式。

3 个答案:

答案 0 :(得分:1)

使用+使?量词延迟。您不需要{1}部分。

public\s+enum\s+\w+\s*(?<enumBody>\{[\S|\s|]+?\})

答案 1 :(得分:0)

尝试将^放在正则表达式的前面。

答案 2 :(得分:0)

如果这是整个正则表达式,则延迟量词将起作用,但如果您想阻止匹配超过结束括号,那么最好通过使用[^}]明确禁止该字符作为组的一部分:

public enum.*\w.*(?<enumBody>[^}]+})

如果你不想在开放式大括号之前加入空格,你可以在前面做同样的事情:

public enum[^{]*(?<enumBody>{[^}]+})