我的示例代码如下所示:
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 = ...
答案 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)
。
结果:
答案 1 :(得分:0)
我想你想要Regex.Split功能:
string name = "[name1][name2][name3][name4][name5]".TrimStart('[').TrimEnd(']');
string[] str = Regex.Split(name, @"\]\[");