Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.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# 使用LINQ分离列表元素并将结果插入列表_C#_Asp.net_Linq_List_Word - Fatal编程技术网

C# 使用LINQ分离列表元素并将结果插入列表

C# 使用LINQ分离列表元素并将结果插入列表,c#,asp.net,linq,list,word,C#,Asp.net,Linq,List,Word,我有一个这样的字符串列表(“”乔“”、“想要””、“到””、“谢谢”、“你!””)我想要的是分开“你”、“!”和“”并使用LINQ将它们插入到该列表中。我知道这里有很多LINQ专家,他们可以在一分钟内完成。我所做的是把一个句子分成几个词: string sentence = "\"Joe wants to thank you!\""; string[] words = sentence.split(" "); List<string> result = new

我有一个这样的字符串列表(“”乔“”、“想要””、“到””、“谢谢”、“你!””)我想要的是分开“你”、“!”和“并使用LINQ将它们插入到该列表中。我知道这里有很多LINQ专家,他们可以在一分钟内完成。我所做的是把一个句子分成几个词:

    string sentence = "\"Joe wants to thank you!\"";
    string[] words = sentence.split(" ");
    List<string> result = new List<string>();

    for (int i = 0; i < words.Length; i++)
    {
        string word = words[i];
        if (word.EndsWith("."))
        {
            result.Add(word.Substring(0, word.LastIndexOf(".")));
            result.Add(".");
        }
        else if (word.EndsWith("..."))
        {
            result.Add(word.Substring(0, word.LastIndexOf("...")));
            result.Add("...");
        }
        else if (word.EndsWith(","))
        {
            result.Add(word.Substring(0, word.LastIndexOf(",")));
            result.Add(",");
        }
        else if (word.EndsWith("\""))
        {
            result.Add(word.Substring(0, word.LastIndexOf("\"")));
            result.Add("\"");
        }


     }
string-sense=“\”乔想谢谢你\"";
字符串[]单词=句子。拆分(“”);
列表结果=新列表();
for(int i=0;i

问题在于以!“结尾的句子注意:单词是按空格分割的数组。

如果输入数组曾经是普通字符串,则使用正则表达式按
\b
分割它要简单得多,这意味着:

在空格和标点符号方面同样适用,但将数字视为单词的一部分(例如,拆分后,
Joe2
仍将保留
Joe2

此外,由于
\b
是零长度匹配,因此将speace视为“单词”,以便在使用
的位置删除它们

有关更多详细信息,请参阅和


编辑:在修复线程中其他人指出的缺陷后,这个答案基本上与他们的答案相同。对于这个问题,所有正确的答案都是相同的,但每个错误的答案都是唯一错误的:)

如果输入数组曾经是一个普通字符串,那么使用正则表达式按
\b
拆分它要简单得多,这意味着:

在空格和标点符号方面同样适用,但将数字视为单词的一部分(例如,拆分后,
Joe2
仍将保留
Joe2

此外,由于
\b
是零长度匹配,因此将speace视为“单词”,以便在使用
的位置删除它们

有关更多详细信息,请参阅和


编辑:在修复线程中其他人指出的缺陷后,这个答案基本上与他们的答案相同。看起来对于这个问题,所有正确的答案都是一样的,但是每个错误的答案都是唯一错误的:)

也许你只是在寻找一个正则表达式

var sentence = "\"Joe wants to thank you!\"";
var result = Regex.Split(sentence, @"(\.{3}|\W)").Where(w => !String.IsNullOrWhiteSpace(w));
结果是:


也许您只是在寻找正则表达式

var sentence = "\"Joe wants to thank you!\"";
var result = Regex.Split(sentence, @"(\.{3}|\W)").Where(w => !String.IsNullOrWhiteSpace(w));
结果是:


这里有一个解决方案,它的重点是使用
Regex.Split
,而不是使用Linq(尽管Linq仍在使用):


这里有一个解决方案,它的重点是使用
Regex.Split
,而不是使用Linq(尽管Linq仍在使用):


因为您已经在按空格进行拆分,所以只需在拆分之前添加一个空格即可

sentence = sentence.Replace("!", " !");
我认为你不需要林克,但你需要一些优雅的东西

var addMyspace = new List<string>{"!", "...", "\"", ".", ","};

foreach(var s in addMyspace)
{
     sentence = sentence.Replace(s, string.Format(" {0}",s));
}
//split
var addMyspace=新列表{“!”,“…”,“\”,“,”,“};
foreach(addMyspace中的var s)
{
句子=句子.Replace(s,string.Format(“{0}”,s));
}
//分裂

既然您已经在按空格进行拆分,只需在拆分之前添加一个空格即可

sentence = sentence.Replace("!", " !");
我认为你不需要林克,但你需要一些优雅的东西

var addMyspace = new List<string>{"!", "...", "\"", ".", ","};

foreach(var s in addMyspace)
{
     sentence = sentence.Replace(s, string.Format(" {0}",s));
}
//split
var addMyspace=新列表{“!”,“…”,“\”,“,”,“};
foreach(addMyspace中的var s)
{
句子=句子.Replace(s,string.Format(“{0}”,s));
}
//分裂

这是一个解决方案,适用于字符串中可能遇到的任何类型的标点符号

Regex regex = new Regex(@"(\w+|(\W)\2*)");

string sentence = "\"Joe wants to thank you! Here is another sentence, where we will...get this to work! Right now.\"";

var words = regex.Matches(sentence).Cast<Match>().Where(m => !String.IsNullOrWhiteSpace(m.Value)).Select(m => m.Value);

foreach (var word in words)
    Console.WriteLine(word);

这里有一个解决方案,适用于字符串中可能遇到的任何类型的标点符号

Regex regex = new Regex(@"(\w+|(\W)\2*)");

string sentence = "\"Joe wants to thank you! Here is another sentence, where we will...get this to work! Right now.\"";

var words = regex.Matches(sentence).Cast<Match>().Where(m => !String.IsNullOrWhiteSpace(m.Value)).Select(m => m.Value);

foreach (var word in words)
    Console.WriteLine(word);

这些字符串有什么模式吗?看来定期移除就可以了。@liran63??如何删除一个紧跟标点符号的单词,并将其放回列表中?是不是
(“,”乔“,”想要“,”到“,”谢谢“,”你“,”
只是
“乔想谢谢你!”
在你的代码中的某个点?我想他只是想再加一个if(word.EndsWith(“!”);或者我遗漏了什么?你可以在用空格分割之前先替换(“!”,“!”)
,这些字符串有什么模式吗?看来定期移除就可以了。@liran63??如何删除一个紧跟标点符号的单词,并将其放回列表中?是不是
(“,”乔“,”想要“,”到“,”谢谢“,”你“,”
只是
“乔想谢谢你!”
在你的代码中的某个点?我想他只是想再加一个if(word.EndsWith(“!”);或者我遗漏了什么?您可以在按空格拆分之前先替换字符串(“!”,“!”)
。按单词边界拆分不会拆分
!“
分为
。按单词边界拆分不会拆分
!“
转换成
。很好,但是这种形式的句子怎么样:string-sense=“\”乔想谢谢你\“这是另一句话,我们将……让它发挥作用!马上。”@Gohomerdrunk我修改了它,也在引号上拆分。谢谢Yaakov,你的代码很好,但我可以接受1个答案,我对正则表达式不太熟悉,不能按照我的意愿修改它。但是投票结果非常好,但是下面这句话呢:string-sense=“\”乔想谢谢你\“这是另一句话,我们将……让它发挥作用!现在。