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

如何从含其他内容的字符串中提取01DEC22格式的日期?

问题描述

我有如下字符串:

var text1 = "TEST 01DEC22 test";

希望从中仅提取出01DEC22格式的日期。当字符串仅包含该日期时,我用以下正则代码能成功提取:

var text = "01DEC22";
var results = Regex.Matches(text, @"^(([0-9])|([0-2][0-9])|([3][0-1]))(JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)\d{2}$")
                   .Cast<Match>()
                   .Select(x => x.Value)
                   .FirstOrDefault();
解决方案

你原来的正则用了^(字符串开头)和$(字符串结尾)锚定整个文本,所以只能匹配纯日期的字符串。要从混合内容里提取目标日期,只需要去掉这两个锚点,再加上\b(单词边界)避免误匹配即可:

修改后的代码

var text1 = "TEST 01DEC22 test";
var results = Regex.Matches(text1, @"\b(([0-9])|([0-2][0-9])|([3][0-1]))(JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)\d{2}\b")
                   .Cast<Match>()
                   .Select(x => x.Value)
                   .FirstOrDefault();
// 运行后results的值为"01DEC22"

关键说明

  • 去掉^和$:让正则可以匹配字符串中的任意子串,而非仅限整个字符串。
  • 新增\b:确保匹配的日期前后是单词边界(比如空格、标点或字符串首尾),避免提取到类似X01DEC22或01DEC22Y这类和其他字符粘连的内容。如果你的场景中日期可能和其他字符连在一起,可以去掉\b只保留核心正则部分。

多匹配场景处理

如果字符串中存在多个符合格式的日期,把FirstOrDefault()换成ToList()就能获取所有匹配结果:

var allDates = Regex.Matches(text1, @"\b(([0-9])|([0-2][0-9])|([3][0-1]))(JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)\d{2}\b")
                    .Cast<Match>()
                    .Select(x => x.Value)
                    .ToList();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 00:40:42