C# 从C中的字符串获取所有日期#

C# 从C中的字符串获取所有日期#,c#,split,C#,Split,我使用的是一个基于web的DOTNET应用程序,其中数据库中有一个日志列,每当用户在UI上的comments textarea中添加注释时,日期、他的姓名以及注释都会附加到数据库中的现有数据中。以下是列包含数据的格式: 04/05/11 17:10:19 (user2):Work Log - Closing. 03/31/11 09:40:02 (user2):Work Log - Support provided over phone. 03/31/11 09:39:43 (user1):Wo

我使用的是一个基于web的DOTNET应用程序,其中数据库中有一个日志列,每当用户在UI上的comments textarea中添加注释时,日期、他的姓名以及注释都会附加到数据库中的现有数据中。以下是列包含数据的格式:

04/05/11 17:10:19 (user2):Work Log -
Closing.
03/31/11 09:40:02 (user2):Work Log -
Support provided over phone.
03/31/11 09:39:43 (user1):Work Log –
Awaiting support reply
03/30/11 11:30:08 (user2):Work Log -
Manager notified by standard e-mail communication.
03/30/11 11:29:30 (user1):Work Log -
Emailed support team
03/30/11 11:28:52 (user1):Work Log -
I have an issue with my Xbox.

我现在尝试在输入这些评论时提取所有日期(仅日期)。我尝试了很多选择,但没有一个有用

假设您希望在C代码中执行此操作:

regex方法的优点在于,您可以对其进行扩展以提取用户:

Regex splitter = new Regex("(?<date>[0-9]{2}/[0-9]{2}/[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}) \\((?<user>.+)\\)");
foreach (Match m in splitter.Matches(theDatabaseValue)) {
    string dateString = m.Groups["date"].Value;
    DateTime dt = DateTime.ParseExact(dateString, "MM/dd/yy HH:mm:ss", null);
    string user = m.Groups["user"].Value;
    Console.WriteLine("{0} {1}", dt.ToString(), user);
}
Regex splitter=newregex((?[0-9]{2}/[0-9]{2}/[0-9]{2}[0-9]{2}:[0-9]{2}:[0-9]{2})\\(?。+)\\”;
foreach(在拆分器中匹配m.Matches(数据库值)){
字符串dateString=m.Groups[“date”].Value;
DateTime dt=DateTime.ParseExact(日期字符串,“MM/dd/yy HH:MM:ss”,null);
字符串user=m.Groups[“user”].Value;
Console.WriteLine(“{0}{1}”,dt.ToString(),user);
}
因此,即使是消息(我还没有完成正则表达式的这一部分,因为我不确定在消息之前是否有换行符,看起来是这样的)


完成此操作后,您可以创建一个包含三列(日期、用户、注释)的数据库表,然后使用正则表达式将现有表转换为该表,从而使您未来的生活更加轻松

您应该重构数据库,将数据存储在三列中(DateTime、User、Comment),这将大大提高性能和可用性

但是如果这不是一个选项,您可以使用它从字符串中获取值。例如:

        string comment = "04/05/11 17:10:19 (user2):Work Log - Closing.";

        string dateSection = comment.Substring(0, 17);

        DateTime date;

        if (!DateTime.TryParse(dateSection, out date))
        {
            throw new Exception(string.Format("unable to parse string '{0}'", dateSection));
        }

这不是在乞求
fldDateTime | fldUser | fldMessage
您是将其检索为单个大字符串还是每个注释都检索一个字符串?你到底试了什么?每隔一行取一个前17个字符的子字符串怎么样?@StaWho我正在一次获取完整字符串,我不能按其他行,因为注释可能是多行的。@TRR。根据我的回答,如果要将整串文本提取到一个字符串变量中,那么regex实际上是您唯一的选择,但它看起来确实像是一个数据库的重新设计,每行有一个日志和一个日期,用户和评论栏会让你的生活更轻松。代码中的更正日期格式:根据OP sampleWorks,它是月/日/年,如charm。。。使用正则表达式是我现在唯一的选择。非常感谢,安迪
        string comment = "04/05/11 17:10:19 (user2):Work Log - Closing.";

        string dateSection = comment.Substring(0, 17);

        DateTime date;

        if (!DateTime.TryParse(dateSection, out date))
        {
            throw new Exception(string.Format("unable to parse string '{0}'", dateSection));
        }