结合正则表达式和linq来拆分c#中的字符串

时间:2015-08-26 13:28:53

标签: c# regex linq

我的示例代码如下所示:

string name = "[name1][name2][name3][name4][name5]";

Match match = Regex.Match(name, @"\w+");
string[] _name = new string[5];
int i = 0;

while (match.Success)
{
     _name[i] = match.Value;
     i++;
     match = match.NextMatch();
}
match = null;

您能否通过组合regex和linq帮助我将代码转换为1行?

可能的结果如下:string[] _name = ...

2 个答案:

答案 0 :(得分:4)

您可以使用

var result = Regex.Matches("[name1][name2][name3][name4][name5]", @"\w+")
                  .Cast<Match>()
                  .Select(p => p.Value).ToList();

或者代替Cast,您可以使用OfType。见MSDN

  

OfType<TResult>(IEnumerable)方法仅返回源中可以强制转换为TResult类型的元素。要在无法将元素强制转换为TResult类型的情况下接收异常,请使用Cast<TResult>(IEnumerable)

结果:

enter image description here

答案 1 :(得分:0)

我想你想要Regex.Split功能:

string name = "[name1][name2][name3][name4][name5]".TrimStart('[').TrimEnd(']');
string[] str = Regex.Split(name, @"\]\[");