C#:在日期上拆分字符串,保持日期不变

本文关键字:日期 拆分 字符串 | 更新日期: 2023-09-27 17:58:46

我有以下示例数据:

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
}

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

C#:在日期上拆分字符串,保持日期不变

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

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

对上面的正则表达式进行拆分,将为您提供所需的输出。它将在空字符串上拆分字符串,该字符串前面是形式为21/10/2012的日期,而不是digit。我们需要做look-behind的事情,这样它就不会把一天的部分撕裂。否则,它将在211之前的空字符串上进行拆分,从而将21/10/2012保留为单独的元素。

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


使用正则表达式验证日期可能会变得复杂。特别是,如果你想限制每个可能的无效日期,比如30 Feb。但是,如果你愿意,你可以试试这个正则表达式,但它会匹配30&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}))");