C# 使用LINQ分离列表元素并将结果插入列表
我有一个这样的字符串列表(“”乔“”、“想要””、“到””、“谢谢”、“你!””)我想要的是分开“你”、“!”和“”并使用LINQ将它们插入到该列表中。我知道这里有很多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
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=“\”乔想谢谢你\“这是另一句话,我们将……让它发挥作用!现在。