通过Regex拆分字符串[重复]

dm7nw8vv  于 2023-05-08  发布在  其他
关注(0)|答案(4)|浏览(127)

此问题已在此处有答案

Regular expression to extract text between square brackets(15个回答)
5年前关闭。
我目前正在考虑如何使用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]
kcrjzv8t

kcrjzv8t1#

这将在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}");
}

EDIT表达式(\[.+?\])的工作方式如下

1.首先,外圆括号()表示捕获与内部模式匹配的任何内容
1.然后转义方括号\[\]匹配源字符串中的[]
1.最后,.+?表示匹配一个或多个字符,但次数尽可能少,这样它就不会匹配第一个[和最后一个]之前的所有字符

niknxzdl

niknxzdl2#

我知道你规定了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]
5jvtdoz2

5jvtdoz23#

下面的正则表达式解决方案仅限于3个值,每个值只有2位数字,用逗号分隔。在 foreach 循环中,您可以通过match.Value访问匹配值。
请记住包含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
}
lp0sw83n

lp0sw83n4#

感谢所有的答案,我也得到了它的工作,通过使用此代码

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

相关问题