Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将字符串拆分为c中的2字字符串集_C#_Regex_String - Fatal编程技术网

C# 将字符串拆分为c中的2字字符串集

C# 将字符串拆分为c中的2字字符串集,c#,regex,string,C#,Regex,String,我想将字符串拆分为两个单词字符串集。比如说, 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('

我想将字符串拆分为两个单词字符串集。比如说,

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"
但这不是我要找的。
我怎样才能做到这一点?任何帮助都将不胜感激。谢谢。

用空格分隔,迭代到最后一项,然后在列表中放入两个带格式的项,怎么样

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]));
}

用空格分隔,迭代到最后一项,然后将两个带格式的项放入该列表,怎么样

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]));
}

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

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]);
}

这段代码在语法上可能不正确,但这个想法会奏效

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

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]);
}

这段代码在语法上可能不正确,但这个想法会奏效

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

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();


使用\w+?=\w+\w+,我们确保捕获一个单词\w+,然后捕获下一个单词,但不使用前瞻?=\w+\w+使用\w+,但忽略非单词字符\w+。然后我们在Select中加入两个单词。

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

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();


使用\w+?=\w+\w+,我们确保捕获一个单词\w+,然后捕获下一个单词,但不使用前瞻?=\w+\w+使用\w+,但忽略非单词字符\w+。然后,我们只需将这两个单词连接到Select中。

您介意编辑字符串吗,还是必须按原样编辑。否则,您可以添加一个“-”符号或其他东西,然后使用该符号拆分它?否则,一个简单的for循环将在您每隔一个忽略它的地方执行。它是一个动态字符串。所以我需要把我提到的单词列表分成两组。这个任务的单词是什么?空格之间有什么吗?好的@RajDeInno,我现在就发布答案。你介意编辑字符串吗?还是必须保持原样。否则,您可以添加一个“-”符号或其他东西,然后使用该符号拆分它?否则,一个简单的for循环将在您每隔一个忽略它的地方执行。它是一个动态字符串。所以我需要把我提到的单词列表分成两组。这个任务的单词是什么?空格之间有什么吗?好的@RajDeInno,我现在发布答案。