C#:在日期保留日期完整分割字符串

时间:2013-02-12 16:43:36

标签: c# regex

我有以下示例数据:

21/10/2012 blahblah blah blahblah 265 blah 25 22/10/2012 blahblah blah blahblah 10 blah 14 blah 66 NK blahblah blah blahblah 25

我希望输出为以下数据:

21/10/2012 blahblah blah blahblah 265 blah 25
22/10/2012 blahblah blah blahblah 10 blah 14 blah 66 NK blahblah blah blahblah 25

我尝试了以下内容:

var regex = new Regex ("(\d{1,2})/(\d{1,2})/(\d{4})");
var matches = regex.Matches(str);//str is given above
foreach(var item in matches)
{
  //my logic to do operations
}

这给出了日期数组。如何在日期分割字符串?

1 个答案:

答案 0 :(得分:3)

您可以在日期之前将字符串拆分为空字符串。为此你需要这个正则表达式:

string[] arr = Regex.split(str, "(?<!\d)(?=\d{1,2}/\d{1,2}/\d{4})");

分割上面的正则表达式,将为您提供所需的输出。它会将您的字符串拆分为空字符串,前面是表单的日期 - 21/10/2012,而不是digit。我们需要做look-behind这些东西,这样它就不会把这一天分开。如果没有它,它将在1中的21之前拆分空字符串,从而将21/10/2012保持为单独的元素。

另外,请注意,您将获得empty string作为数组的第一个元素,因为字符串中的第一个空字符串满足拆分条件。


使用正则表达式验证日期会变得复杂。特别是,如果您想限制每个可能的无效日期,例如30 Feb。但是,如果你想要,你可以尝试这个正则表达式,但它将匹配 30&amp; 2月31日甚至 11月31日

string[] arr = Regex.split(str, "(?<!\\d)(?=(?:0[1-9]|[1-2][0-9]|[3][01])/(?:0[1-9]|1[0-2])/(?:19[0-9]{2}|2[0-9]{3}))");