Регулярное выражение .NET для синтаксического анализа регулярного выражения. - PullRequest
1 голос
/ 07 апреля 2010

Я хочу вернуть совпадения из строки регулярного выражения. Строка регулярного выражения:

(?<TICKER>[A-Z]+)(?<SPACE>\\s)(?<MONTH_ALPHA_ABBREV>Jan|Feb|Mar|Apr|May|Jun|Jul|Sep|Oct|Nov|Dec)(?<SPACE>\\s)(?<DAY>\\d+)(?<SPACE>\\s)(?<YEAR_LONG>[2][0][0-9][0-9])(?<SPACE>\\s)(?<STRIKE_DOLLAR>\\d+(?=[.]))[.](?<STRIKE_DECIMAL>(?<=[.])\\d+)(?<SPACE>\\s)(?<PUTCALL_LONG>Call|Put)

И я хочу получить совпадения для всех имен групп и всех элементов в квадратных скобках (включая квадратные скобки) за пределами открытых и закрытых скобок. У меня есть это регулярное выражение:

((?<=[<])([A-Z]|[_])+(?=[>]))|(\\[.\\])

Но это возвращает квадратные скобки в скобках. Чтобы быть более конкретными, это совпадения, которые я хочу получить от регулярного выражения вверху (имейте в виду, что это должно быть гибким для любого регулярного выражения):

TICKER
SPACE
MONTH_ALPHA_ABBREV
SPACE
DAY
SPACE
YEAR_LONG
SPACE
STRIKE_DOLLAR
[.]
STRIKE_DECIMAL
SPACE
PUTCALL_LONG

Ответы [ 2 ]

2 голосов
/ 08 апреля 2010
((?<=[<])([A-Z]|[_])+(?=[>]))|(?<!\([^\)]*)\[[^\]]+\]

Кроме того, используйте обозначение @"", чтобы вам не пришлось избегать обратной косой черты (как вы делали в своем примере кода).Этот щенок достаточно неразборчив.

0 голосов
/ 07 апреля 2010

Когда вы соответствуете своему регулярному выражению, вы можете установить опции для включения RegexOptions.ExplicitCapture, который будет захватывать только именованные группы, как правило, все, что находится в скобках.Затем вы можете назвать все свои группы захвата, используя этот формат (?<captureGroupName>[insertRegExHere]).Это позволяет вам захватывать все что угодно и использовать разумные имена.

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