C# 选择列表中有元音的单词<;T>;

C# 选择列表中有元音的单词<;T>;,c#,pattern-matching,C#,Pattern Matching,我使用StreamReader类读取txt文件并将其加载到列表中,现在我想选择带有元音的单词并将它们存储到新列表中,这样我就可以使用StreamWriter只将选定的单词写入新的txt文件中,从给定的单词列表中选择单词(但您可以检索到该列表)您可以使用Linq选择仅包含元音的元音: string vowels = "aeiou"; List<string> words = new List<string>(); //words populated var vowelWor

我使用StreamReader类读取txt文件并将其加载到列表中,现在我想选择带有元音的单词并将它们存储到新列表中,这样我就可以使用StreamWriter只将选定的单词写入新的txt文件中,从给定的单词列表中选择单词(但您可以检索到该列表)您可以使用Linq选择仅包含元音的元音:

string vowels = "aeiou";
List<string> words = new List<string>();
//words populated
var vowelWords = words.Where( word => word.All( c => vowels.Contains(c) ))
                      .ToList();
根据评论进行编辑:

要选择包含多个元音的单词,请执行以下操作:

var vowelWords = words.Where(word => word.Count(c => vowels.Contains(c)) > 1)
                      .ToList();

要从给定的单词列表中选择单词(但是您可以检索),可以使用Linq选择仅包含元音的单词:

string vowels = "aeiou";
List<string> words = new List<string>();
//words populated
var vowelWords = words.Where( word => word.All( c => vowels.Contains(c) ))
                      .ToList();
根据评论进行编辑:

要选择包含多个元音的单词,请执行以下操作:

var vowelWords = words.Where(word => word.Count(c => vowels.Contains(c)) > 1)
                      .ToList();

下面是一个可行的例子。我用记事本++写的,所以可能会有一些
或类似信息丢失。您可以根据自己的需要进行调整:

//Reading...
List<string> originalWords = new List<string>();

using (var reader = new StreamReader(...)) {
    while (!reader.EndOfLine()) {
        string line = reader.ReadLine();
        var splitted = line.Split(new string[] {" "}, StringSplitOptions.None);
        foreach (var word in splitted) {
            if (!originalWords.Contains(word)) {
                originalWords.Add(word);
            }
        }
    }
}

//Filtering...
List<string> filtered = new List<string>();
string vowels = "aeiou";

foreach (var word in originalWords) {
    foreach (var vowel in vowels) {
        if (word.Contains(vowel))
            filtered.Add(vowel);
            break;
    }
}

//Writing...
using (var writer = new StreamWriter(...)) {
    foreach (var word in filtered) {
        writer.WriteLine(word);
    }
}
//正在阅读。。。
List originalWords=新列表();
使用(var reader=newstreamreader(…){
而(!reader.EndOfLine()){
字符串行=reader.ReadLine();
var splitted=line.Split(新字符串[]{“},StringSplitOptions.None);
foreach(拆分中的变量字){
如果(!originalWords.Contains(word)){
原始单词。添加(单词);
}
}
}
}
//过滤。。。
列表过滤=新列表();
字符串元音=“aeiou”;
foreach(原始单词中的var单词){
foreach(元音中的变元音){
if(单词包含(元音))
过滤。添加(元音);
打破
}
}
//写作。。。
使用(var writer=newstreamwriter(…){
foreach(过滤后的变量字){
作者:写线(word);
}
}

以下是一个可行的示例。我用记事本++写的,所以可能会有一些
或类似信息丢失。您可以根据自己的需要进行调整:

//Reading...
List<string> originalWords = new List<string>();

using (var reader = new StreamReader(...)) {
    while (!reader.EndOfLine()) {
        string line = reader.ReadLine();
        var splitted = line.Split(new string[] {" "}, StringSplitOptions.None);
        foreach (var word in splitted) {
            if (!originalWords.Contains(word)) {
                originalWords.Add(word);
            }
        }
    }
}

//Filtering...
List<string> filtered = new List<string>();
string vowels = "aeiou";

foreach (var word in originalWords) {
    foreach (var vowel in vowels) {
        if (word.Contains(vowel))
            filtered.Add(vowel);
            break;
    }
}

//Writing...
using (var writer = new StreamWriter(...)) {
    foreach (var word in filtered) {
        writer.WriteLine(word);
    }
}
//正在阅读。。。
List originalWords=新列表();
使用(var reader=newstreamreader(…){
而(!reader.EndOfLine()){
字符串行=reader.ReadLine();
var splitted=line.Split(新字符串[]{“},StringSplitOptions.None);
foreach(拆分中的变量字){
如果(!originalWords.Contains(word)){
原始单词。添加(单词);
}
}
}
}
//过滤。。。
列表过滤=新列表();
字符串元音=“aeiou”;
foreach(原始单词中的var单词){
foreach(元音中的变元音){
if(单词包含(元音))
过滤。添加(元音);
打破
}
}
//写作。。。
使用(var writer=newstreamwriter(…){
foreach(过滤后的变量字){
作者:写线(word);
}
}

使用Linq和Regex,您可以非常快速地完成这项工作

var words = [your code to get them into a collection]

var withVowels = from word in words
                 where Regex.IsMatch(word, "[AEIOUaeiou]")
                 select word;

使用Linq和Regex可以非常快地完成

var words = [your code to get them into a collection]

var withVowels = from word in words
                 where Regex.IsMatch(word, "[AEIOUaeiou]")
                 select word;

你也可以匹配一些正则表达式,因为你可能想考虑Y是元音。从

([aeiou])|([A-Za-z]y)
开始,如果您需要更复杂的内容,请继续。如果你想测试你的正则表达式,这是一个很好的开始

// Your words go in here
List<string> words;
// is vowelled a word?
var vowelledWords = words.Where(w => Regex.IsMatch(w, "([aeiou])|([A-Za-z]y)"));
//你的话放在这里
列出单词;
//元音是一个单词吗?
var vouelledwords=words.Where(w=>Regex.IsMatch(w,“([aeiou])|([A-Za-z]y)”);

< /代码> 也可以匹配一些正则表达式,因为您可能想考虑Y是元音。从
([aeiou])|([A-Za-z]y)
开始,如果您需要更复杂的内容,请继续。如果你想测试你的正则表达式,这是一个很好的开始

// Your words go in here
List<string> words;
// is vowelled a word?
var vowelledWords = words.Where(w => Regex.IsMatch(w, "([aeiou])|([A-Za-z]y)"));
//你的话放在这里
列出单词;
//元音是一个单词吗?
var vouelledwords=words.Where(w=>Regex.IsMatch(w,“([aeiou])|([A-Za-z]y)”);

它可以是任何带或不带元音的单词,这里最重要的是我只需要包含元音的单词。如编程、加载、选择etc@Michael27“编程”不仅仅包含你真正需要解决问题的元音
仅元音
单词
列表
您需要清除很多元音。@Oscar抱歉,我的不好。我的意思是从单词列表中选择,只包含元音的单词,更清楚的是,我想他是说他有一组字符串,他只想选择那些包含至少一个元音的字符串(但无法想象有太多的自然语言有没有元音的单词),但我可能误读了,可能是任何有元音或没有元音的单词,这里最重要的是我只需要包含元音的单词。如编程、加载、选择etc@Michael27“编程”不仅仅包含你真正需要解决问题的元音
仅元音
单词
列表
您需要清除很多元音。@Oscar抱歉,我的不好。我的意思是从单词列表中选择,只包含元音的单词,更清楚的是,我想他是说他有一组字符串,他只想选择那些至少包含一个元音的字符串(虽然不能想象太多自然语言中有没有元音的单词),但我可能是误读了。“如果您只想要包含至少一个元音的单词”我有一个问题,可以选择包含不止一个元音的单词吗?谢谢var vouelwords=words.Where(word=>word.Count(c=>vouels.Contains(c))>1.ToList();如果您只想要包含至少一个元音的单词,这很有效“我对此有一个问题,是否可以选择包含1个以上元音的单词?谢谢var vouelwords=words.Where(word=>word.Count(c=>vouels.Contains(c))>1.ToList();这起作用了