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

如何提取字符串中的指定日期子串?已尝试substring方法未解决

嗨,我懂你为啥用substring搞不定了——这个方法得靠固定的索引位置,但你字符串前面的****、xxx.$$$$这些部分长度要是变了,substring直接就失效了。其实换个思路,用正则表达式或者字符串分割的方法,就能轻松搞定这个问题!

方法一:正则表达式(灵活通用)

正则的优势在于它能根据内容的模式匹配,不管前面的内容长度怎么变,只要日期是「8位数字,且位于.之后、_之前」,就能精准提取出来。

核心匹配规则

我们可以用这个正则:\.(\d{8})_

  • \.:匹配字符串中的点(点在正则里是特殊字符,必须加反斜杠转义)
  • (\d{8}):捕获连续的8位数字(这就是我们要的日期)
  • _:匹配日期后面的下划线,用来定位边界

下面给几个常见编程语言的实现例子:

JavaScript

const targetStr = "abcd_efgh.ijkl.20210909_mnop";
const dateMatch = targetStr.match(/\.(\d{8})_/);
const extractedDate = dateMatch ? dateMatch[1] : "未找到日期";
console.log(extractedDate); // 输出:20210909

Java

String targetStr = "abcd_efgh.ijkl.20210909_mnop";
Pattern datePattern = Pattern.compile("\\.(\\d{8})_");
Matcher matcher = datePattern.matcher(targetStr);
if (matcher.find()) {
    String extractedDate = matcher.group(1);
    System.out.println(extractedDate); // 输出:20210909
}

Python

import re
target_str = "abcd_efgh.ijkl.20210909_mnop"
date_match = re.search(r'\.(\d{8})_', target_str)
if date_match:
    extracted_date = date_match.group(1)
    print(extracted_date) # 输出:20210909
方法二:字符串分割(适合结构固定的场景)

如果你的字符串结构永远严格遵循****_xxx.$$$$.日期_&&&&的格式,也就是日期一定在第二个.之后、第一个_之前,那用字符串分割的方法更简单直接:

JavaScript

const targetStr = "abcd_efgh.ijkl.20210909_mnop";
// 先按点分割,取第三部分(索引从0开始)
const dateSection = targetStr.split('.')[2];
// 再按下划线分割,取第一部分就是日期
const extractedDate = dateSection.split('_')[0];
console.log(extractedDate); // 输出:20210909

Python

target_str = "abcd_efgh.ijkl.20210909_mnop"
date_section = target_str.split('.')[2]
extracted_date = date_section.split('_')[0]
print(extracted_date) # 输出:20210909

这个方法代码更简洁,但要注意:如果字符串结构有变化(比如多了一个点或者下划线),就会出错,所以适合结构完全固定的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 10:42:50