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

如何结合正则表达式从字符串列表中提取目标字符串?

用单一正则表达式合并两步筛选逻辑

当然可以合并!你可以构造一个同时满足包含"pty"和包含指定日期数字的正则表达式,直接一次筛选出符合条件的字符串,还能避免原代码中只匹配第一个数字的潜在问题(比如原代码会漏掉像pty_abddd_20220220_20220221这种包含目标日期但不在第一个位置的字符串)。

实现代码

import java.util.Arrays;
import java.util.List;
import java.util.regex.Pattern;

public class StringFilter {
    public static void main(String[] args) {
        String targetDate = "20220221";
        // 构造正则:匹配包含pty且包含目标日期的任意字符串
        String regex = String.format(".*pty.*%s.*", Pattern.quote(targetDate));
        Pattern pattern = Pattern.compile(regex);

        List<String> strList = Arrays.asList(
            "pty_abddd_20220220_20220221",
            "pty_hello_20220220_20220221",
            "abc_gecko_20022023_21022023",
            "pty_abddd_20220221_20220222"
        );

        // 遍历筛选并输出结果
        for (String str : strList) {
            if (pattern.matcher(str).matches()) {
                System.out.println(str);
            }
        }
    }
}

正则表达式说明

  • .*:匹配任意数量的任意字符(包括0个),用来连接"pty"和目标日期,允许它们在字符串的任意位置
  • pty:确保字符串包含该固定标识
  • %s:动态替换为目标日期,用Pattern.quote()包裹是为了避免日期中如果出现特殊正则字符(虽然本次日期都是数字,但养成好习惯)导致匹配异常
  • 整个表达式的逻辑是:字符串中只要同时存在"pty"和目标日期,不管它们的顺序和中间内容,都符合匹配条件

输出结果

pty_abddd_20220220_20220221
pty_hello_20220220_20220221
pty_abddd_20220221_20220222

如果你的需求是目标日期必须作为独立的数字段(比如不能是其他长数字的一部分),可以把正则调整为:

String regex = String.format(".*pty.*\\b%s\\b.*", Pattern.quote(targetDate));

这里的\\b是单词边界,确保目标日期是一个独立的、被下划线或其他非单词字符包围的数字段,避免误匹配类似202202211这类字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 05:55:19