You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Regex.Split按日期拆分字符串失败,寻求解决方案

问题分析与解决方案

我一眼就看出问题出在哪了——你的正则表达式用了^和$这两个锚点符号,它们分别代表整个字符串的开头和整个字符串的结尾。也就是说,你的正则是在找“整个字符串就是一个日期”的情况,但你要处理的原文本里,日期只是其中的一部分,根本不是整个字符串,所以这个正则完全匹配不到任何内容,Regex.Split自然就返回原字符串了。

修正后的代码

把正则里的^和$去掉,让它匹配字符串中任意位置的日期格式就行:

string input = "SEND MILK EVERYDAY FOR THIS PERSON FROM 02/10/2014 TO 02/11/2014 SKIP 03/11/2014 AND 09/11/2014";
// 保留日期作为拆分结果的一部分(因为正则里有捕获组)
string[] split = Regex.Split(input, @"(0?[1-9]|[12][0-9]|3[01])[\/\-](0?[1-9]|1[012])[\/\-]\d{4}");

如果你不想把日期包含在拆分后的结果里,可以把正则改成非捕获组(用(?:...)包裹):

// 拆分后只保留日期前后的文本片段
string[] split = Regex.Split(input, @"(?:0?[1-9]|[12][0-9]|3[01])[\/\-](0?[1-9]|1[012])[\/\-]\d{4}");

效果示例

用第一个代码拆分后,结果会是这样的片段集合:

  • "SEND MILK EVERYDAY FOR THIS PERSON FROM "
  • "02/10/2014"
  • " TO "
  • "02/11/2014"
  • " SKIP "
  • "03/11/2014"
  • " AND "
  • "09/11/2014"

如果需要更精细的拆分逻辑(比如只在日期的前后空白处拆分),还可以给正则加上空白匹配,比如\s+(日期正则)\s+,但目前这个修改已经能解决你最核心的问题了。

内容的提问来源于stack exchange,提问作者Anish Sivadas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:54:07