4
我正在處理一個c#正則表達式,可以匹配嵌套結構(本例中爲括號)以及任意運算符(本例中爲'|'字符)。使用正則表達式和下推自動機匹配組嵌套括號
我已經開始使用here所述的下推自動機。
我到目前爲止有:
String pattern = @"
(?# line 01) \(
(?# line 02) (?>
(?# line 03) \((?<DEPTH>)
(?# line 04) |
(?# line 05) \) (?<-DEPTH>)
(?# line 06) |
(?# line 07) .?
(?# line 08))*
(?# line 09) (?(DEPTH)(?!))
(?# line 10) \)
";
var source = "((Name1| Name2) Blah) | (Name3 (Blah | Blah))";
var matches = Regex.Matches(source, pattern,
RegexOptions.IgnorePatternWhitespace);
matches.Dump();
產生以下結果:
// ((Name1| Name2) Blah)
// (Name3 (Blah | Blah))
期望的結果:
// ((Name1| Name2) Blah)
// |
// (Name3 (Blah | Blah))
注:有可能會或可能不會有任何運營商之間的團體。例如,源可能看起來像 「((名稱1 |名稱2)布拉赫)(NAME3(布拉赫|布拉赫))」
正則表達式不適合這個。我建議你自己解析它或使用解析庫。也就是說,假設你的嵌套括號結構可能比你給出的更復雜。 –
@SimonWhitehead是的,我意識到解析器是更好的維護方法。我打算使用Antlr作爲更常見的解決方案。謝謝您的意見! –