如何使用正则表达式

时间:2016-03-31 12:13:19

标签: c# regex

我有一个包含大量文本的字符串,在此文本中的日期格式为dd-MM-yyyy。本文的一个例子如下

Composed by super, mtzshm to super, mtzshm on 31-Mar-2016 02:24 with Normal priority and Message Type General Message

我希望使用Regex提取文本的日期部分,并将其转换为DateTime

3 个答案:

答案 0 :(得分:2)

日期时间:\d{2}-[A-z]{3}-\d{4}\s\d{2}:\d{2}

日期:\d{2}-[A-z]{3}-\d{4}

\d{2}       Match a digit of length 2
-           Matches character '-'
[A-z]{3}    Matches a character in the Range 'A' to 'z' of length 3
[A-z]*      Matches a character in the Range 'A' to 'z' of length x
\s          Matches any white space character
:           Matches character ':'

答案 1 :(得分:0)

我想知道字符串包含什么内容?它只包含DD-MM-YYYY还是有其他东西?

如果您只传递了DD-MM-YYYY,并希望将其转换为DateTime 你可以在不使用正则表达式的情况下进行简单的for循环

string date = "DD-MM-YYYY";

string year = null;
string month = null;
string day = null;

for ( int i = 0; i < 10; ++i)
{
   if ( i < 2)
     day += date[i];
   if ( i > 2 && i < 5 )
     month += date[i];
   if ( i > 5 )
     year += date[i];
}

DateTime date = new DateTime();
date = date.AddYears(Convert.ToInt32(year)-1);
date = date.AddMonths(Convert.ToInt32(month)-1);
date = date.AddDays(Convert.ToInt32(day-1);

这应该可行,只是直接在网站上编码, 告诉我,这不是你需要的,因为没有足够的解释。

编辑:你想要获得2016年3月31日的Nvm,这意味着它不是DD-MM-YYYY格式,而是DD-MMM-YYYY格式,它提供了这个正则表达式:

^(([0-9])|([0-2][0-9])|([3][0-1]))\-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\-\d{4}$

答案 2 :(得分:0)

以下正则表达式将从给定字符串中捕获日期部分。

\b\d{1,2}\-[a-z]{3}\-\d{4}\b

最终代码应该看起来像

var text = "Composed by super, mtzshm to super, mtzshm on 31-Mar-2016 02:24 with ";
text    += "Normal priority and Message Type General Message";

var rx = new Regex(@"\b\d{1,2}\-[a-z]{3}\-\d{4}\b", RegexOptions.IgnoreCase | RegexOptions.Multiline);

var match = rx.Match(text);
if (match.Success)
{
    var dateString = match.Value;
    var date = DateTime.Parse(dateString);

    Console.WriteLine(date);
}

如果一切顺利,您会看到以本地格式打印的漂亮日期。在我的情况下它''

3/31/2016 12:00:00 AM