我有一个字符串。字符串就像这样
您好我是编码员,我的DOB是12/09/2011。
我想从这句话中提取日期。我如何使用C#执行此操作?我不想要正则表达式。这是最近向我询问的一个面试问题。
这是我的尝试
string myStr = "Hello 12/3/2013";
DateTime s;
DateTime.TryParse(myStr,out s);
Console.WriteLine(s);
我的输出为
01-01-0001 00:00:00
答案 0 :(得分:4)
C#和JavaScript都支持正则表达式。您可以使用此模式查找字符串的该部分:
\d{2}/\d{2}/\d{4}
当然,这并不能确保它是一个有效的日期,例如13/88/0000
会匹配该模式。然后,您必须使用类似Date.Parse
的内容来解析字符串。
但是,既然你说正则表达式不是一个选项,这里有一个非常粗糙的单行:
var input = "Hello I am a Coder, My DOB is 12/09/2011.";
DateTime date = new DateTime();
input.Split().SkipWhile(s => !DateTime.TryParse(s, out date)).Any();
Console.WriteLine(date); // 12/9/2011 12:00:00 AM
答案 1 :(得分:2)
由于您不想使用REGEX,只需将字符串拆分为空格,然后使用DateTime.TryParseExact
查看是否有任何字符串被解析为DateTime
string str = "Hello I am a Coder, My DOB is 12/09/2011";
string[] array = str.Split();//splits on space
string dateFormat = "M/d/yyyy"; //works with both single digit and double digit
//(day/month) for parsing
//or d/M/yyyy depending your date culture
DateTime tempDateTime;
var result = array.FirstOrDefault(r =>
DateTime.TryParseExact
(r,
dateFormat,
CultureInfo.InvariantCulture,
DateTimeStyles.NoCurrentDateDefault,
out tempDateTime));
您的result
将包含日期字符串,而您的tempDateTime
将包含已解析的DateTime
。