通过正则表达式拆分字符串[重复]

Posted

技术标签:

【中文标题】通过正则表达式拆分字符串[重复]【英文标题】:Split a string by Regex [duplicate] 【发布时间】:2018-06-02 16:09:04 【问题描述】:

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

【问题讨论】:

为什么是正则表达式?只需在']'拆分即可 我在想是否有更好的方法而不是将其拆分为 ']'? \[\d\d,\d\d,\d\d\] maybe? string.Split 更好 @UweKeim 显然有一个问题,很容易解决。 【参考方案1】:

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

编辑这就是表达式(\[.+?\]) 的工作原理

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

【讨论】:

你能解释一下正则表达式模式吗?如果是这样,我可以将其标记为答案。 @iamcoder 请查看更新后的答案【参考方案2】:

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

【讨论】:

【参考方案3】:

下面的正则表达式解决方案仅限于 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, @"(\[\d2,\d2,\d2\])+"))

  // do stuff

【讨论】:

太好了,这个也可以。【参考方案4】:

感谢大家的回答,我也通过使用此代码使其工作

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

【讨论】:

以上是关于通过正则表达式拆分字符串[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在Python中的正则表达式上拆分字符串[重复]

用于根据空格分隔符拆分文本的正则表达式 [重复]

使用正则表达式拆分以特定字符开头和结尾的组[重复]

Java:使用正则表达式拆分字符串而不删除分隔符[重复]

逗号和双引号CSV格式的正则表达式拆分[重复]

用于在所有空格处拆分的正则表达式 Python [重复]