C#字符串分割到阵列基于先前字符
问题描述:
我需要一个字符串,并基于对字符内不匹配他们继续进行它的类型将其分割成一个数组。C#字符串分割到阵列基于先前字符
所以,如果你有“ASD FDS 1.4#3”这将分成数组,以达致这最好的办法如下
stringArray[0] = "asd";
stringArray[1] = " ";
stringArray[2] = "fds";
stringArray[3] = " ";
stringArray[4] = "1";
stringArray[5] = ".";
stringArray[6] = "4";
stringArray[7] = "#";
stringArray[8] = "3";
任何recomendations?当然,我可以创建基于.ToCharArray()循环,但一直在寻找更好的方式来实现这一目标。
谢谢
答
使用正则表达式和链接的组合,您可以执行以下操作。
using System.Text.RegularExpressions;
using System.Linq;
var str="asd fds 1.4#3";
var regex=new Regex("([A-Za-z]+)|([0-9]+)|([.#]+)|(.+?)");
var result=regex.Matches(str).OfType<Match>().Select(x=>x.Value).ToArray();
添加其他捕获组以捕获其他差异。最后捕获(.+?)
是一个非贪婪的一切。因此,在这个的捕捉每一个项目将被认为是不同的(包括两次相同的项目)
更新 - 正则表达式
var regex=new Regex(@"(?:[A-Za-z]+)|(?:[0-9]+)|(?:[#.]+)|(?:(?:(.)\1*)+?)");
的新修订本现在使用非捕获组,以便\1
可以在最后的拍摄中使用。这意味着如果在同一个角色中抓住所有组,它将被分组。
例如字符串“ASD消防处”前将建立4串(每个空间将被认为是不同的),现在的结果是3串为2个相邻空间被合并
+0
这明白了!谢谢!!! – Nic 2012-07-31 22:26:52
答
使用正则表达式:
var mc = Regex.Matches("asd fds 1.4#3", @"([a-zA-Z]+)|.");
var res = new string[mc.Count];
for (var i = 0; i < mc.Count; i++)
{
res[i] = mc[i].Value;
}
答
这个程序产生正是你想要的输出,但我不知道羯羊它是你的目标一般enaugh。
class Program
{
private static void Main(string[] args)
{
var splited = Split("asd fds 1.4#3").ToArray();
}
public static IEnumerable<string> Split(string text)
{
StringBuilder result = new StringBuilder();
foreach (var ch in text)
{
if (char.IsLetter(ch))
{
result.Append(ch);
}
else
{
yield return result.ToString();
result.Clear();
yield return ch.ToString(CultureInfo.InvariantCulture);
}
}
}
}
你所说的“字符内的类型不匹配,他们继续它”是什么意思?你能否给出更多的解释和例子? – 2012-07-31 15:26:55
是啊,这是不是真的清楚你问什么,但作为一个侧面说明,为什么不使用一个列表? – 2012-07-31 15:28:08
这是分化?字母,数字和其他字符?或者哪些? – Marco 2012-07-31 15:34:48