3

我有以下示例数据:

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
}

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

4

1 回答 1

3

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

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

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

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


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

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}))");
于 2013-02-12T16:45:32.200 回答