问题描述
- 正则表达式提取字符串问题
-
110kV1#母分开关由运行改热备用(110kV1#母分备自投由信号改跳闸(1区),110kV1#母分保护由跳闸改信号(1区)),110kV1#母分开关由运行改热备用(110kV1#母分备自投由信号改跳闸(1区),110kV1#母分保护由跳闸改信号(1区))上面符串括号都是半角中文状态,括号里面可能会嵌套N个括号和其他字符串,上面只是个例子
要求写出一对正则表达式,匹配最外层的括号里面的所有内容
如上面可以匹配到的字符串如下:
(110kV1#母分备自投由信号改跳闸(1区),110kV1#母分保护由跳闸改信号(1区))
(110kV1#母分备自投由信号改跳闸(1区),110kV1#母分保护由跳闸改信号(1区))会匹配到两个字符串
解决方案
static void RegexBalance()
{
string txt = @"110kV1#母分开关由运行改热备用(110kV1#母分备自投由信号改跳闸((1区)),110kV1#母分保护由跳闸改信号(1区)),110kV1#母分开关由运行改热备用(110kV1#母分备自投由信号改跳闸(1区),110kV1#母分保护由跳闸改信号(1区))";
string patten = @"([^()]*(((?'op'()[^()]*)+((?'-op'))[^()]*)+)*(?(op)(?!))[^()]*)";
Regex.Matches(txt, patten).Cast<Match>().ToList().ForEach(x =>
{
Console.WriteLine(x.Value);
});
}
解决方案二:
([sS]*?([sS]*?)[sS]*?))
时间: 2024-09-14 09:42:44