如果我有一个字符串,例如“abcdef {123} ghi {456} kl”,我想创建一个正则表达式,它将按如下方式分隔所有部分:
abcdef
{123}
ghi
{456}
kl
我正在使用此代码,但无法弄清楚表达式应该是什么:
System.Text.RegularExpressions.Regex rex = new System.Text.RegularExpressions.Regex("expression");
foreach (System.Text.RegularExpressions.Match match in rex.Matches(sText).OfType<System.Text.RegularExpressions.Match>())
{
...
}
答案 0 :(得分:3)
您应该使用using
语句,而不是每次都完整地写出命名空间。乍一看,您的代码看起来相当复杂,但是当您删除所有命名空间时,它变得非常简单。此外,不需要OfType
。
正则表达式应该尽可能匹配,这不是开括号[^{]*
,或者是开括号,一些文本然后是右括号{[^}]*}
。正则表达式为:
{[^}]*}|[^{]*
试试这段代码:
string text = "abcdef{123}ghi{456}kl";
Regex regex = new Regex("{[^}]*}|[^{]*");
foreach (Match match in regex.Matches(text))
{
Console.WriteLine(match.Value);
}
输出:
abcdef {123} ghi {456} kl
注意:此正则表达式不会验证字符串的格式是否正确,它假定格式正确。
一种稍微简单的方法是使用Split而不是Matches并在正则表达式中包含一个捕获组,以便分隔符也包含在输出中:
string text = "abcdef{123}ghi{456}kl";
Regex regex = new Regex("({[^}]*})");
foreach (string part in regex.Split(text))
{
Console.WriteLine(part);
}
此输出与上述相同。
答案 1 :(得分:0)
([a-z]+)({\d+})([a-z]+)({\d+})([a-z]+)
将起作用,但前提是字符串中始终有五个部分。可以少于/多于五个吗?