我目前正在考虑如何使用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]
答案 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}之前的所有字符} 答案 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);