我有一堆字符串,我正在尝试解析日期。我有一个将解析日期的脚本,但它在字符串中的所有额外字母都有问题。我需要删除所有字母,但留下诸如 - / _
之类的字符我对Regex并不是特别擅长,所以到目前为止所有这样做的尝试都已经结束了,有太多的字符被删除了。
以下是一些有用的示例字符串:
利特尔顿,CO - Go-Live 5/8
Brunswick - Go-Live 5/14
CutSheeet_Go Live-5-14-14
上线 - 2014年5月19日
答案 0 :(得分:3)
你可以这样做:
Regex.Replace(input, "([a-zA-Z,_ ]+|(?<=[a-zA-Z ])[/-])", "");
工作正则表达式示例:
从您的示例数据中,输出将是:
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