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
}
这给出了日期数组。如何在日期上拆分字符串?
您可以在日期之前将字符串拆分为空字符串。为此,你需要这个正则表达式:
string[] arr = Regex.split(str, "(?<!'d)(?='d{1,2}/'d{1,2}/'d{4})");
对上面的正则表达式进行拆分,将为您提供所需的输出。它将在空字符串上拆分字符串,该字符串前面是形式为21/10/2012
的日期,而不是digit
。我们需要做look-behind
的事情,这样它就不会把一天的部分撕裂。否则,它将在21
中1
之前的空字符串上进行拆分,从而将2
和1/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}))");