在c#中设置的2个字符串中拆分字符串

时间:2016-01-21 11:22:40

标签: c# regex string

我想将字符串拆分为2个字符串集。例如,

string str = "I want to split the string into 2 words"

输出应该是这样的:

1: "I want"
2: "want to"
3: "to split"
4: "split the"
5: "the string"
6: "string into"
7: "into 2"
8: "2 words"

这样做的最佳方法是什么?

我试过这种方式,

var pairs = textBox1.Text.Split(' ')
.Select((s, i) => new { s, i })
.GroupBy(n => n.i / 2)
.Select(g => string.Join(" ", g.Select(p => p.s)))
.ToList();

但它不起作用。我得到了以下字符串集。

1: "I want"
2: "to split"
3: "the string"
4: "into 2"
5: "words"

但这不是我要找的。  我怎样才能做到这一点?任何帮助将非常感激。感谢。

3 个答案:

答案 0 :(得分:3)

如何使用空格分割,迭代到最后一项,并将两个带格式的项目放入该列表?

string str = "I want to split the string into 2 words";
var array = str.Split(' ');

var list = new List<string>();

for (int i = 0; i < array.Length - 1; i++)
{
     list.Add(string.Format("{0} {1}", array[i], array[i + 1]));
}

enter image description here

答案 1 :(得分:2)

首先,正如您所做的那样,按空格分割每个单词,如下所示:

String[] words = str.Split(' ')

现在,只需遍历此数组并将每对字符串连接成一个新数组。

String[] pairs = new String[words.Length - 1];

for (int i = 0; i+1 < words.length; i++)
{
    pairs[i] = string.Format("{0} {1}", words[i], words[i+1]);
}

这段代码可能在语法上不正确,但这个想法会起作用!

答案 2 :(得分:1)

我只想分享正则表达式方法:

var s = "I want to split the string into 2 words";
var result = Regex.Matches(s, @"(\w+)(?=\W+(\w+))")
               .Cast<Match>()
               .Select(p => string.Format("{0} {1}", p.Groups[1].Value, p.Groups[2].Value))
               .ToList();

请参阅IDEONE demo

使用(\w+)(?=\W+(\w+)) regex,我们确保捕获一个单词((\w+)),然后捕获下一个单词,但不要使用前瞻((?=\W+(\w+))) (使用(\w+))但省略非单词字符(\W+)。然后我们加入Select中的2个单词。