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

PowerShell:如何提取固定格式文本中的日期子字符串

提取固定格式文本中的日期(兼容两种场景)

刚好碰到过类似的需求,用正则表达式就能完美解决,不管日期后面有没有后续文本都能准确提取。

思路分析

你的两种文本格式都是以DEACTIVATED on 作为固定前缀,日期部分之后要么直接结束,要么跟着 | MANAGER xxx的后缀。核心就是要精准捕获前缀之后、后缀(如果存在)之前的日期内容。

方案一:精准匹配日期格式(推荐)

这个正则会严格匹配你给出的日期格式(星期3字母+月份3字母+2位日期+4位年份),同时忽略后面可选的后缀内容:

$string1 = "DEACTIVATED on Tue Apr 02 2019";
$string2 = "DEACTIVATED on Tue Apr 02 2019 | MANAGER John Smith";

// 定义正则表达式
$datePattern = '/DEACTIVATED on (\w{3} \w{3} \d{2} \d{4})(?: \|.*)?$/';

// 提取第一个字符串的日期
preg_match($datePattern, $string1, $matches1);
$date1 = $matches1[1]; // 输出:Tue Apr 02 2019

// 提取第二个字符串的日期
preg_match($datePattern, $string2, $matches2);
$date2 = $matches2[1]; // 输出:Tue Apr 02 2019

正则各部分解释:

  • DEACTIVATED on :匹配固定前缀,确保我们从正确的位置开始提取
  • (\w{3} \w{3} \d{2} \d{4}):捕获组,精准匹配你需要的日期格式,这部分就是我们要的结果
  • (?: \|.*)?:非捕获可选组,匹配|开头的后续内容(?:表示不捕获这部分),?表示这部分可有可无
  • $:匹配字符串结尾,避免匹配到文本中间的无关内容

方案二:灵活截断(更简洁)

如果日期格式不会有变化,也可以用更简洁的方式,直接提取前缀之后到第一个|之前的内容(没有|就取到结尾),最后用trim()去掉多余空格:

$pattern = '/DEACTIVATED on ([^|]+)/';

preg_match($pattern, $string2, $matches);
$date = trim($matches[1]); // 输出:Tue Apr 02 2019

这个方法的优势是写法简单,只要前缀和分隔符|固定就可以用,适合快速实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:19:50