使用正则表达式从字符串日期获取子字符串

时间:2014-04-07 04:50:25

标签: c# regex

我有这个字符串" Date.2014.07.04"

然后,如果我想得到" 07"使用正则表达式从上面的字符串。

我该怎么做?

我不想使用拆分。

为什么我不想使用拆分?因为当我们拆分时,结果将是字符串数组。通常我们会尝试获取我们想要的数组索引。在我的情况下,它将是

var date = "Date.2014.07.04";
date.Split('.')[2];

但是,我们要将日期更新为新字符串(全部删除'。')。

var date = "Date20140704";
date.Split('.')[2];

这会引发错误,因为它无法找到索引编号2.

通过使用正则表达式,此错误不会发生,如果我们想要的模式无法在字符串中找到,它将只返回空字符串。 :)

3 个答案:

答案 0 :(得分:6)

您最好使用DateTime.ParseExact解析日期然后获取所需的部分,但您必须先从日期字符串中删除Date.

DateTime dt = DateTime.ParseExact(strDate.Replace("Date.",""), "yyyy.MM.dd", CultureInfo.InvariantCulture);
int month = dt.Month;

您也可以使用string.Split

string month =  strDate.Split('.')[2];

答案 1 :(得分:1)

这样做:

"Date.2014.07.04".Split('.')[2];

由于您坚持使用Regex,请执行以下操作:

var value = Regex.Match("Date.2014.07.04",@"(?<=\w{4}\.\d{4}\.)\d+").Value

答案 2 :(得分:0)

使用像ParseExactTryParseTryParseExact之类的日期时间函数是一个很好的建议,因为它也会验证每个部分。但是,如果你真的需要正则表达式,看看这个,它也将验证月份部分:

(0?[1-9]|1[0-2])\.\d{2}$

Demo