C # Regex для соответствия типу перечисления телосложения - PullRequest
0 голосов
/ 29 июня 2010

У меня есть это перечисление в файле:

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 ]

1 голос
/ 29 июня 2010

Сделать квантификатор + ленивым, используя ?. Вам не нужна {1} часть.

public\s+enum\s+\w+\s*(?<enumBody>\{[\S|\s|]+?\})
0 голосов
/ 29 июня 2010

Ленивый квантификатор будет работать, если это все регулярное выражение, но если вы хотите, чтобы совпадение не проходило за конечную скобку, то лучше явно запретить этот символ как часть группы, используя [^}]:

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

Если вы не хотите включать пробелы перед открывающей скобкой, вы можете сделать то же самое на передней панели:

public enum[^{]*(?<enumBody>{[^}]+})
0 голосов
/ 29 июня 2010

попробуйте поставить ^ в начале вашего регулярного выражения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...