使用正则表达式拆分字符串
使用正则表达式拆分字符串
这个问题已经有了答案:
我正在思考如何将这种字符串拆分成使用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日
我知道你指定了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]
这个 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}"); }
编辑 这个表达式 (\[.+?\])
的工作原理:
- 首先,外面的括号,
(
和)
,意味着要捕获里面匹配的任何东西 - 然后,转义了的方括号,
\[
和\]
,是为了匹配源字符串中的[
和]
- 最后,
.+?
意味着匹配一个或多个字符,但是最少的次数,这样它才不会匹配到第一个[
和最后一个]
之间的所有字符