用正则表达式拆分一个字符串[复制]

问题描述 投票:-3回答:4

这个问题在这里已有答案:

我目前正在考虑如何使用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]
c# regex
4个回答
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. 首先是外括号,qazxsw poi和(,意味着捕捉内部模式匹配的任何内容
  2. 那么转义的方括号)\[,就是要匹配源字符串中的\][
  3. 最后]意味着匹配一个或多个字符,但尽可能少,以便它不会匹配第一个.+?和最后一个[之前的所有字符

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);

1
投票

下面的Regex解决方案仅限于由逗号分隔的2个数字的3个值。在foreach循环中,您可以通过[01,01,01] [02,03,00] [03,07,00] [04,06,00] [05,02,00] [06,04,00] [07,08,00] [08,05,00] 访问匹配值。 match.Value

请记住包括>> Refiddle example

using System.Text.RegularExpressions;

0
投票

谢谢大家的答案,我也使用这个代码

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
}
© www.soinside.com 2019 - 2024. All rights reserved.