如何提取字符串中的指定日期子串?已尝试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
相关产品推荐
相关产品推荐

