从字符串中删除字母字符,留下数字和符号

时间:2014-05-09 21:29:11

标签: c# regex string

我有一堆字符串,我正在尝试解析日期。我有一个将解析日期的脚本,但它在字符串中的所有额外字母都有问题。我需要删除所有字母,但留下诸如 - / _

之类的字符

我对Regex并不是特别擅长,所以到目前为止所有这样做的尝试都已经结束了,有太多的字符被删除了。

以下是一些有用的示例字符串:

  

利特尔顿,CO - Go-Live 5/8

     

Brunswick - Go-Live 5/14

     

CutSheeet_Go Live-5-14-14

     

上线 - 2014年5月19日

4 个答案:

答案 0 :(得分:3)

你可以这样做:

Regex.Replace(input, "([a-zA-Z,_ ]+|(?<=[a-zA-Z ])[/-])", "");

工作正则表达式示例:

http://regex101.com/r/kD2jF4

从您的示例数据中,输出将是:

5/8
5/14
5-14-14
5-19-2014

答案 1 :(得分:1)

您可以使用以下功能:

public static string Parse(string source)
{
    var numbers = new [] {'0','1','2','3','4','5','6','7','8','9' };
    var chars = new [] { '-', '/', '_' };

    return  new string(source
            .Where(x => numbers.Contains(x) || chars.Contains(x))
            .ToArray()).Trim(chars); 
}  

这是fiddle

答案 2 :(得分:0)

试试这个:

public static string StripCrap(string input)
{
    return input.Where(c => char.IsNumber(c) || c == '_' || c == '/' || 
                       c == '-').Aggregate("", (current, c) => current + c);
}

或者,如果您想要一个可维护的列表:

public static string StripCrap(string input)
{
    char[] nonCrapChars = {'/', '-', '_'};

    return input.Where(c => char.IsNumber(c) || nonCrapChars.Contains(c)).Aggregate("", (current, c) => current + c);
}

或者......你也可以创建一个扩展方法:

public static string ToNonCrappyString(this string input)
{
    char[] nonCrapChars = {'/', '-', '_'};

    return input.Where(c => char.IsNumber(c) || nonCrapChars.Contains(c)).Aggregate("", (current, c) => current + c);
}

你可以这样称呼它:

string myString = "Hello 1234!";
string nonCrappyString = myString.ToNonCrappyString();

答案 3 :(得分:0)

使用此模式.*?(\d+[\d-\/]*\d+)|.*并替换为$1 Demo