RegEx用于过滤Java HashMap键

时间:2019-04-28 02:46:21

标签: java regex

我试图通过它们的键过滤为String / Int的HashMap,并在RegEx上进行匹配

Map<String, Integer> files = new HashMap<>();
files.put("TEST_SALES1212312.zip", 1212312);
files.put("TEST_SALES9846545.zip", 9846545);
files.put("TEST_INVENTORY2153516.zip", 2153516);
files.put("TEST_INVENTORY3651321.zip", 3651321);

String regex = "(TEST_SALES|.)+(.zip)";

List<Map.Entry<String, Integer>> matches = files.entrySet().stream()
        .filter(x -> x.getKey().matches(regex))
        .sorted(Map.Entry.comparingByValue())
        .collect(Collectors.toList());

matches.forEach(x -> System.out.println(x.getKey()));

我在RegEx Tester上进行了测试,它正确地过滤出了库存物品。但是,上面的代码不会过滤任何项目。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

This RegEx可能会帮助您解决问题。它将为您的zip文件的数值创建一个目标组(),您可以使用 $ 1 来简单地获得该目标组:

TEST_[A-Z]+([0-9]+).zip

enter image description here

如有必要,您可以使用 \ 转义特定于语言的元字符,例如

如果您的输入仅限于示例代码,则可以根据需要减小正则表达式的边界,例如this RegEx,并且它可能仍然匹配:

[A-Z_]+([0-9]+).zip

enter image description here