C# 如何使用正则表达式和Intersect函数从文件中分离关键字

C# 如何使用正则表达式和Intersect函数从文件中分离关键字,c#,file,console-application,C#,File,Console Application,我想读两个文件,一个是.c文件,另一个是.csv文件。现在.csv有一个C关键字列表。我想将这些C关键字与.C程序匹配,并只选择关键字并显示在控制台上 也许这是一个简单的任务,但我不明白 通过下面的代码,我可以得到字符数组中的所有字母,但现在这是一个字符串,如何将它们与特定的单词匹配,并仅从字符串中选择该单词。还有别的办法吗 class FileReader { static void Main(string[] args) { string[] cprgline

我想读两个文件,一个是.c文件,另一个是.csv文件。现在.csv有一个C关键字列表。我想将这些C关键字与.C程序匹配,并只选择关键字并显示在控制台上

也许这是一个简单的任务,但我不明白

通过下面的代码,我可以得到字符数组中的所有字母,但现在这是一个字符串,如何将它们与特定的单词匹配,并仅从字符串中选择该单词。还有别的办法吗

class FileReader
{
    static void Main(string[] args)
    {
        string[] cprglines = File.ReadAllLines("E:\\cprogram\\cpro\\fact.c");
        string[] ckeywordslines = File.ReadAllLines("E:\\ckeywords.csv");

        string letters = string.Empty;
        List<string> list = new List<string>();

        foreach (string a in cprglines)
        {
           foreach (char c in a)
            {
                if (Char.IsLetter(c))
                {
                    letters += c;
                }
            }

            list.Add(letters);
        }

        string[] arr = list.ToArray();

        foreach (string a1 in arr)
        {
            Console.WriteLine(a1);
        }

        Console.ReadKey();
    }
}
你的错误在这里

foreach (string a in cprglines)
        {
           foreach (char c in a)
            {
                if (Char.IsLetter(c))
                {
                    letters += c;
                }
            }

            list.Add(letters);
        }
我不是在这里写代码,因为它需要太多的时间。但我会告诉你怎么写

拆分字符串并获取单个单词 检查每个单词,,;,-,+,/或%。如果是,请删除这些特殊字符。 现在检查C关键字列表中是否有。 如果它在那里,那么将它添加到您的列表中。
如果我没弄错你的问题。这可能对你有用

string contentinc = @"#include <stdio.h> int main() {     int number;     printf('Enter an integer: ');     scanf('%d', &number);    // True if the number is perfectly divisible by 2    if(number % 2 == 0)        printf('%d is even.', number);    else        printf('%d is odd.', number);    return 0;}";
string contectincsv = "include, main, number, there are, some thing, scanf, true";
contentinc = Regex.Replace(contentinc, @"[^0-9a-zA-Z ]+", " ");
List<string> listofc = contentinc.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).ToList();
List<string> listofcsv = contectincsv.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(p => p.Trim()).ToList();
List<string> Commonlist = listofcsv.Intersect(listofc).ToList();

现在还不清楚你想要实现什么,你能更清楚一点吗?关于需求,以及预期输出是什么您想要的是读取文件并读取与某些特定单词匹配的所有单词。这就是你想要的吗?是的。假设我的程序有一个void main语句,所以我只想要void和main,请澄清您的具体问题或添加额外的细节,以突出显示您所需要的内容。正如目前所写的,很难准确地说出你在问什么。请参阅“如何询问”页面以获取帮助,以澄清此问题。它非常容易理解。我想匹配两个file1和file1的内容,并只选择匹配的单词。但我的问题是file1有这样的词include,file2有关键字include,stdio。所以现在我想在控制台上读取file1与file2n display only include和stdio的匹配。如何将符号与单词分开。拆分字符串以获得单个单词需要定义分隔字符。如果字符被定义为空格和其他符号,则步骤1和2可以在一次调用中完成。我尝试了此操作,但对我无效。Intersect隐式仅返回不同的元素,因此例如,printf在CommonList中只显示一次。这可能是OP想要的,也可能不是你的天才。这段代码工作得很好,输出正是我想要的。非常感谢:你知道我想要什么输出。最重要的是,他们忙着给我减分,告诉我的帖子是重复的,并投票结束这个问题。有时我们无法准确地解释大脑中发生了什么。是的@我同意你的看法,有时候我们不知道技术术语的确切术语或名称。但我们正在寻找一些解决办法。但让我告诉你,传达信息的一个简单方法是告诉你的输入和预期输出。这使得程序员更容易理解。希望你同意我的看法。是的,我会记在心里的。谢谢: