从给定的字符串中删除不同的子字符串(学期名称)

时间:2015-08-11 21:01:17

标签: c#

我有一个按课程名称和学期格式化的课程数据库。

一些例子:

  • ARCH 6359 2015年春季
  • BIOL 3324 2013年秋季
  • ENGI 2304 SP15
  • GCSW FA 13
  • GENB 4350 2011年夏季
  • GROUP Writing Consultations 2011Fall
  • 是准备Fa12

(fa-fall sp-spring)

我需要复制并从每个字符串中删除学期。格式的不一致让我头疼不已。

非常感谢任何有关如何开始此任务的输入。

2 个答案:

答案 0 :(得分:0)

因为我也没有看到任何适用于所有字符串的真实模式。我会创建函数来处理可能发生的不同子组。

从我所看到的,我得出了5种不同的模式:

2015年春季(SemesterNameFull +“”+年)

SP 15(SemesterNameShort +“”+ ShortYear)

FA12(SemesterNameShort + ShortYear)

2011年夏季(SemesterNameFull +“”+年份)

2011Fall(Year + SemesterNameFull)

您可以使用代码创建一段时间内的所有实例,然后使用简单的选择&替换以摆脱他们中的大多数。

答案 1 :(得分:0)

这是对它的打击。困难的部分(在操作数据之前要做的第一件事)是将字符串拆分成实际有意义的标记。

因此,将每个字符串按空格分开,字母/数字相交,执行一些字符串清理,并删除所有不需要的标记。似乎适用于您输入的数据。

private static void Main()
{
     var list = new[]
     {
         "ARCH 6359 Spring 2015", "BIOL 3324 Fall 2013", "ENGI 2304 SP15", "GCSW FA 13", "GENB 4350 Summer 2011",
         "GROUP Writing Consultations 2011Fall", "YES Prep Fa12"
     };

     var toRemove = new[] {"SP", "SPRING", "FA", "Fall", "Summer"};

     foreach (var str in list)
     {
        var items = Regex.Split(str, @"(?<=\D)(?=\d)|(?<=\d)(?=\D)|(\s+)")
                .Select(i => i.Trim())
                .Where(i => i != "" && !toRemove.Contains(i, StringComparer.OrdinalIgnoreCase));

        Console.WriteLine(String.Join(" ",items));
    }

    Console.Read();
}

产地:

ARCH 6359 2015
BIOL 3324 2013
ENGI 2304 15
GCSW 13
GENB 4350 2011
GROUP Writing Consultations 2011
YES Prep 12