Java如何使用正则表达式提取字符串指定位置的目标内容
Java 提取文件名指定字段实现方案
针对从固定格式sbm文件名中提取one/two/three字段的需求,以下是两种可直接运行的实现方式,优先满足正则匹配的要求:
方法1:正则捕获组实现(推荐,带格式校验能力)
核心逻辑是根据文件名的固定结构编写正则规则,用小括号包裹需要提取的目标位置内容作为捕获组,匹配成功后直接读取捕获组内容即可。
import java.util.regex.Matcher; import java.util.regex.Pattern; public class ExtractField { public static void main(String[] args) { String[] fileList = { "choryangStn_110_220114_one_0.sbm", "choryangStn_110_220114_two_0.sbm", "choryangStn_110_220114_three_0.sbm" }; // 正则规则:匹配完整文件名结构,捕获第三个和第四个下划线之间的英文内容 Pattern fileNamePattern = Pattern.compile("^.*_\\d+_\\d+_([a-z]+)_\\d+\\.sbm$"); for (String fileName : fileList) { Matcher matcher = fileNamePattern.matcher(fileName); if (matcher.matches()) { // group(0)是整个匹配到的字符串,group(1)是第一个捕获组的内容 String target = matcher.group(1); System.out.println(target); } } } }
正则规则说明:
^标记字符串起始位置,$标记字符串结束位置,避免匹配到不符合完整格式的内容.*_\\d+_\\d+_匹配目标字段前的前缀、两段数字编号(对应示例中的110、220114)和连接下划线([a-z]+)是捕获组,匹配连续英文字符,也就是要提取的目标字段_\\d+\\.sbm匹配目标字段后的下划线、数字序号、.sbm后缀,注意.是正则特殊字符,需要加反斜杠转义
运行上述代码会依次输出one、two、three,符合需求。
方法2:字符串分割实现(格式固定时写法更简洁)
如果文件名始终以下划线作为分隔符、字段位置完全固定,也可以直接去掉后缀后按下划线分割,按下标取对应位置内容即可,不需要写正则:
public class ExtractField { public static void main(String[] args) { String[] fileList = { "choryangStn_110_220114_one_0.sbm", "choryangStn_110_220114_two_0.sbm", "choryangStn_110_220114_three_0.sbm" }; for (String fileName : fileList) { // 移除后缀后按下划线分割 String[] splitParts = fileName.replace(".sbm", "").split("_"); // 目标字段在分割结果的第4位,下标从0开始所以取索引3 String target = splitParts[3]; System.out.println(target); } } }
内容的提问来源于stack exchange,提问作者user18045244
相关产品推荐
相关产品推荐

