我有一个像这样的字符串:
mystring = "test1, 1, anotherstring, 5, yetanother, 400";
myarray可以有不同的长度。我想做的是将字符串拆分为:
{"test1, 1"}
{"anotherstring, 5}
{"yetanother, 400"}
这可能吗?我试过string[] newArray = mystring.Split(',')
,但是它会在每个逗号分开,而不是我想做的第二个逗号。
感谢您的帮助
的ZAP
答案 0 :(得分:9)
您可以使用正则表达式匹配字符串中的两个项目:
string[] parts =
Regex.Matches(myarray[0], "([^,]*,[^,]*)(?:, |$)")
.Cast<Match>()
.Select(m => m.Groups[1].Value)
.ToArray();
这将从数组中的第一个字符串中获取项目。我不知道你为什么在数组中有字符串,如果你有多个字符串,那么你必须循环遍历它们并从每个字符串中获取项目。
答案 1 :(得分:5)
没有直接的方法让String.Split这样做。
如果不考虑性能,可以使用LINQ:
var input = "test1, 1, anotherstring, 5, yetanother, 400";
string[] result = input.Split(',');
result = result.Where((s, i) => i % 2 == 0)
.Zip(result.Where((s, i) => i % 2 == 1), (a, b) => a + ", " + b)
.ToArray();
否则,您可能必须使用String.IndexOf或使用正则表达式手动拆分字符串。
答案 2 :(得分:2)
这里有另一个基于LINQ的解决方案。 (也许不是最有效的,但它允许简洁的代码并适用于分组为任意组大小)。
1)定义新的查询运算符InGroupsOf
:
public static IEnumerable<T[]> InGroupsOf<T>(this IEnumerable<T> parts,
int groupSize)
{
IEnumerable<T> partsLeft = parts;
while (partsLeft.Count() >= groupSize)
{
yield return partsLeft.Take(groupSize).ToArray<T>();
partsLeft = partsLeft.Skip(groupSize);
}
}
2)其次,将其应用于您的输入:
// define your input string:
string input = "test1, 1, anotherstring, 5, yetanother, 400";
// split it, remove excessive whitespace from all parts, and group them together:
IEnumerable<string[]> pairedInput = input
.Split(',')
.Select(part => part.Trim())
.InGroupsOf(2); // <-- used here!
// see if it worked:
foreach (string[] pair in pairedInput)
{
Console.WriteLine(string.Join(", ", pair));
}
答案 3 :(得分:1)
单独使用Split
,但肯定可以实现。
我认为myarray
实际上是一个字符串,而不是数组......?
在这种情况下,你可以这样做:
string myarray = "test1, 1, anotherstring, 5, yetanother, 400";
string[] sourceArray = myarray.Split(',');
string[] newArray = sourceArray.Select((s,i) =>
(i % 2 == 0) ? "" : string.Concat(sourceArray[i-1], ",", s).Trim()
).Where(s => !String.IsNullOrEmpty(s)).ToArray();
答案 4 :(得分:1)
你可以在原始字符串上使用正则表达式来用其他'令牌'替换所有其他逗号,例如';' 然后只需在新令牌上调用string.split。
答案 5 :(得分:0)
有趣的问题......我会这样做:
string input = "test1, 1, anotherstring, 5, yetanother, 400";
string pattern = @"([^,]*,[^,]*),";
string[] substrings = Regex.Split(input, pattern).Where(s => s!="").Select(s => s.Trim()).ToArray();
你得到了你想要的。只有它的脏...... = P =)
答案 6 :(得分:0)
使用IEnumerator ..
var myarray = "test1, 1, anotherstring, 5, yetanother, 400";
System.Collections.IEnumerator iEN = myarray.Split(',').GetEnumerator();
var strList = new List<string>();
while (iEN.MoveNext())
{
var first = iEN.Current;
iEN.MoveNext();
strList.Add((string)first + "," + (string)iEN.Current);
}
:)