由Regex拆分一个字符串

时间:2017-12-20 06:47:48

标签: c# regex

我目前正在考虑如何使用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]

4 个答案:

答案 0 :(得分:3)

这将在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. 最后,.+?表示匹配一个或多个字符,但是尽可能少,以便它不会匹配第一个[和最后一个{{1}之前的所有字符}

答案 1 :(得分:3)

我知道你规定了Regex但是,如果只是出于学术目的,它再次值得看看斯普利特

<强>代码

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]

答案 2 :(得分:1)

下面的Regex解决方案仅限于3个值,只有2位数字,用逗号分隔。在 foreach 循环中,您可以通过match.Value访问匹配值。 >> Refiddle example

请记住加入using System.Text.RegularExpressions;

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]";
foreach(var match in Regex.Matches(input, @"(\[\d{2},\d{2},\d{2}\])+"))
{
  // do stuff
}

答案 3 :(得分:0)

感谢大家的回答,我也使用此代码

string pattern = @"\[\d\d,\d\d,\d\d]";
Regex rgx = new Regex(pattern, RegexOptions.IgnoreCase);

MatchCollection matches = rgx.Matches(myResult);

Debug.WriteLine(matches.Count);

foreach (Match match in matches)
   Debug.WriteLine(match.Value);