2010-06-29 71 views
0

我有这个枚举defitiion文件:C#正则表达式匹配枚举体型

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 }字符串,我不想。我不知道如何让模式停止后首先}

回答

1

请使用?+量词懒惰。您不需要{1}部分。

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

不是第一个。*还需要做出懒惰?它让我觉得你在最后分组了一个大括号,但是。*意味着你可以在枚举和{之间有任意数量的东西。 – Chris 2010-06-29 11:29:59

+0

@Chris是的,你是对的。正则表达式不是正确的代码解析工具(单独使用时)。 – Amarghosh 2010-06-29 11:36:03

0

试着把^放在你的正则表达式的前面。

+0

感谢所有的帮助下,终于我使用THI s模式: 'public \ s + enum \ s + \ w + \ s *(? [^}] +})' – psulek 2010-06-30 07:22:01

0

如果这是整个正则表达式懒惰量词将工作,但如果你想阻止要去过去的结束括号,然后这是更好地利用[^}]明确禁止该字符作为组的一部分的比赛:

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

如果你不希望包括开括号之前的空白,你可以做同样的事情放在前面:

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