我已经建立一个复杂的(对我来说)正则表达式解析一些文件名,它广泛适用,除了那里有更多的括号内的情况。正则表达式:使用周围括号作为分隔符,而忽略任何括号内
(?'field'F[0-9]{1,4})(?'term'\(.*?\))(?'operator'_(OR|NOT|AND)_)?
在下面的例子,我需要的意见后,得到群体,但在第三个例子,我得到((brackets)
而不是((brackets)are valid)
。
对于我的生活,我不能工作,如何把它扩大到搜索最终支架。
C:\Temp\[DB_3][DT_2][F30(green)].vsl // F30 (green)
C:\Temp\[DB_3][DT_2][F21(red)_OR_F21(blue)_NOT_F21(pink)].vsl // F21 (red) _OR_ OR
C:\Temp\[DB_3][DT_2][F21((brackets)are valid)].vsl // F21 ((brackets)are valid)
C:\Temp\[DB_3][DT_2][F21(any old brackets)))))are valid)].vsl // F21 (any old brackets)))))are valid)
C:\Temp\[DB_3][DT_2][F21(brackets))))))_OR_F21(blue)].vsl // F21 (brackets)))))) _OR_ OR
感谢
UPDATE:我使用RegExr实验,然后在C#中实现这样的:
Regex r = new Regex(pattern, RegexOptions.Multiline | RegexOptions.IgnorePatternWhitespace);
foreach(Match m in r.Matches(foo))
{
//etc
}
更新2:我不需要匹配括号。在一组括号内可以是任何数据,我只需要它以外括号终止。
UPDATE 3:
的另一种尝试,这可与额外的括号(实施例3和4),但仍无法打出额外术语(实施例5),但不幸的是包括在终止]
群组。我怎样才能让它搜索(但不包括))_
或)]
作为分隔符,但只包括括号?
(?'field'F[0-9]{1,4})(?'term'\(.*?\)[\]])(?'operator'_(OR|NOT|AND)_)?
最后更新:我已经决定了它不值得在试图解析这个愚蠢格式的努力,所以我打算抛弃的支持,并做一些更高效地使用我的时间。谢谢大家的帮助,我现在已经看到了灯光!
从标题中不太清楚您是否a)要求匹配外部括号的帮助,或者b)尝试避免匹配外部括号。 – pavium 2009-11-18 11:58:32
我已更新标题,希望更有意义 – 2009-11-18 12:02:37