通过正则表达式拆分字符串[重复]
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);
【讨论】:
以上是关于通过正则表达式拆分字符串[重复]的主要内容,如果未能解决你的问题,请参考以下文章