C# 如何将数字和单词分组?

C# 如何将数字和单词分组?,c#,.net,C#,.net,string str=“我们有23名控制论学生,32名计算机科学学生,还有12名教师” 我需要从字符串中提取学生和教师的数量。 将有一个关键字列表,我将需要计算总数 string input = "We have 23 students at Cybernetics, 32 students at Computer Science and we also have 12 teachers"; List<string> keywords = new List<s

string str=“我们有23名控制论学生,32名计算机科学学生,还有12名教师”

我需要从字符串中提取学生和教师的数量。 将有一个关键字列表,我将需要计算总数

string input = "We have 23 students at Cybernetics, 32 students at Computer Science and we also have 12 teachers";

        List<string> keywords = new List<string>();
        keywords.Add("teacher");
        keywords.Add("student");
        keywords.Add("kid");
        keywords.Add("parent");

        foreach(var k in keywords)
        {
            if (input.Contains(k))
            {
                ????
            }
        }
string input=“我们有23名控制论学生,32名计算机科学学生,还有12名教师”;
列表关键字=新列表();
关键词:添加(“教师”);
关键词:添加(“学生”);
关键词:添加(“kid”);
关键词:添加(“母公司”);
foreach(关键字中的var k)
{
if(输入包含(k))
{
????
}
}
产出:55名学生,12名教师


下面是一个没有正则表达式的示例,您可以调整它以支持教师、家长等:

    string input = "We have 23 students at Cybernetics, 32 students at Computer Science and we also have 12 teachers";
    var words = input.Split(' ');
    int studentCount = 0;
    for(int i=0; i<words.Length; i++)
    {
        string word = words[i];
        int nr;
        if(int.TryParse(word, out nr))
        {
            if(i+1 < words.Length && words[i+1] == "students") studentCount+=nr;
        }
    }
    Console.WriteLine("Students " + studentCount);
string input=“我们有23名控制论学生,32名计算机科学学生,还有12名教师”;
变量字=输入。拆分(“”);
int studentCount=0;

对于(inti=0;i这是完整的正则表达式解

string input = @"We have 23 students at Cybernetics, 32 students at Computer Science and we also have 12 teachers";

List<string> keywords = new List<string>();
keywords.Add("student");
keywords.Add("teacher");
keywords.Add("kid");
keywords.Add("parent");

foreach(var k in keywords)
{
    string pattern = @"(\d*) "+k;
    MatchCollection matches = Regex.Matches(input, pattern);
    int total = 0;
    foreach (Match match in matches) {
        total+= Convert.ToInt32(match.Groups[1].Value);
    }
    Console.WriteLine(total + " " + k+", ");
}
string input=@“我们有23名控制论学生,32名计算机科学学生,还有12名教师”;
列表关键字=新列表();
关键词:添加(“学生”);
关键词:添加(“教师”);
关键词:添加(“kid”);
关键词:添加(“母公司”);
foreach(关键字中的var k)
{
字符串模式=@“(\d*)”+k;
MatchCollection matches=Regex.matches(输入,模式);
int-total=0;
foreach(匹配中的匹配){
总计+=转换.ToInt32(匹配.Groups[1].值);
}
Console.WriteLine(总计+“”+k+“”,“”);
}

文本的确切格式是什么?是“学生人数:123”还是“我们总共有120人,包括13名教师”有效输入?您是否尝试对某个特定关键字出现之前出现的数字求和?我相信要解决这个问题,您需要构建人工智能。应该从中提取哪些数字“所有教师和12名学生一起工作"?人类可以说学生数是12,而教师数是未知的。要提供相同的答案,您的程序应该能够理解自然语言,您可能需要使用一些正则表达式。第一个正则表达式:\d.*keyword',然后您可以使用,\d*并添加所有转换为整数的匹配项。一种简单的方法是:将句子拆分为单词。对于每个“学生”或“教师”单词,选择上一个单词并将其解析为一个数字。@某人,我正在尝试对特定关键字的数字求和。例如:“我需要1个苹果、3个西红柿、5个胡萝卜、2个苹果、1个西红柿。”预期产量:3个苹果、4个西红柿、5个胡萝卜过滤字符串='sdasda alskdamkdsa start 3个saadasda苹果asac a end aksnasj asknan aksna start 5土豆end'var模式=/(?结束。所以第一个应该是='3个saadasda苹果asac a a';第二个='5个土豆'。当前输出是:'3个saadasda苹果asac a a结束aksnasj asknan aksna开始5个土豆'