用于正则表达式解析的.NET正则表达式

时间:2010-04-07 19:42:11

标签: c# .net regex

我想从正则表达式字符串返回匹配项。正则表达式字符串是:

(?<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 个答案:

答案 0 :(得分:2)

((?<=[<])([A-Z]|[_])+(?=[>]))|(?<!\([^\)]*)\[[^\]]+\]

此外,使用@""表示法,这样您就不必转义反斜杠(就像您在示例代码中所做的那样)。这只小狗足够难以辨认。

答案 1 :(得分:0)

当你匹配你的正则表达式时,你可以设置选项包括RegexOptions.ExplicitCapture,它只捕获命名组,通常捕获括号内的所有内容。然后,您可以使用此格式(?<captureGroupName>[insertRegExHere])命名所有捕获组。这使您可以捕获任何您喜欢的内容并使用合理的名称。