我有以下示例数据:
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
}
这给出了日期数组。如何在日期分割字符串?
答案 0 :(得分:3)
您可以在日期之前将字符串拆分为空字符串。为此你需要这个正则表达式:
string[] arr = Regex.split(str, "(?<!\d)(?=\d{1,2}/\d{1,2}/\d{4})");
分割上面的正则表达式,将为您提供所需的输出。它会将您的字符串拆分为空字符串,前面是表单的日期 - 21/10/2012
,而不是digit
。我们需要做look-behind
这些东西,这样它就不会把这一天分开。如果没有它,它将在1
中的21
之前拆分空字符串,从而将2
和1/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}))");