2010-06-29 74 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>{[^}]+})