使用正则表达式拆分字符串

45 浏览
0 Comments

使用正则表达式拆分字符串

这个问题已经有了答案

提取方括号中文本的正则表达式

我正在思考如何将这种字符串拆分成使用c#的正则表达式。

[01,01,01][02,03,00][03,07,00][04,06,00][05,02,00][06,04,00][07,08,00][08,05,00]

有谁精通正则表达式可以告诉我如何实现这个目标吗?

不起作用的示例正则表达式模式:

[\dd,\dd,\dd]

样本输出:

[01,01,01]
[02,03,00]
[03,07,00]
[04,06,00]
[05,02,00]
[06,04,00]
[07,08,00]
[08,05,00]

admin 更改状态以发布 2023年5月21日
0
0 Comments

我知道你指定了Regex,但如果只是出于学术目的,重新看一下Split可能是值得的:

代码

var input = "[01,01,01][02,03,00][03,07,00][04,06,00][05,02,00][06,04,00][07,08,00][08,05,00]";
var output = input.Split(']',StringSplitOptions.RemoveEmptyEntries)
                     .Select(x  => x + "]") // the bracket back
                     .ToList();
foreach(var o in output) 
   Console.WriteLine(o);

输出

[01,01,01]
[02,03,00]
[03,07,00]
[04,06,00]
[05,02,00]
[06,04,00]
[07,08,00]
[08,05,00]

0
0 Comments

这个 C# 代码可以实现这个功能:(\[.+?\]),例如:

var s = @"[01,01,01][02,03,00][03,07,00][04,06,00][05,02,00][06,04,00][07,08,00][08,05,00]";
var reg = new Regex(@"(\[.+?\])");
var matches = reg.Matches(s);
foreach(Match m in matches)
{
    Console.WriteLine($"{m.Value}");
}

编辑 这个表达式 (\[.+?\]) 的工作原理:

  1. 首先,外面的括号,(),意味着要捕获里面匹配的任何东西
  2. 然后,转义了的方括号,\[\],是为了匹配源字符串中的 []
  3. 最后,.+? 意味着匹配一个或多个字符,但是最少的次数,这样它才不会匹配到第一个 [ 和最后一个 ] 之间的所有字符
0