-5

我有一个字符串。字符串是这样的

您好,我是一名编码员,我的出生日期是 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
4

2 回答 2

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
于 2013-07-31T18:47:39.943 回答
2

由于您不想使用正则表达式,只需在空间上拆分字符串,然后使用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将包含 Date 字符串,并且您tempDateTime将包含 parsed DateTime

于 2013-07-31T19:45:40.290 回答