我试图通过它们的键过滤为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上进行了测试,它正确地过滤出了库存物品。但是,上面的代码不会过滤任何项目。
我该如何解决这个问题?
答案 0 :(得分:0)
This RegEx可能会帮助您解决问题。它将为您的zip文件的数值创建一个目标组(),您可以使用 $ 1 来简单地获得该目标组:
TEST_[A-Z]+([0-9]+).zip
如有必要,您可以使用 \ 转义特定于语言的元字符,例如。。
如果您的输入仅限于示例代码,则可以根据需要减小正则表达式的边界,例如this RegEx,并且它可能仍然匹配:
[A-Z_]+([0-9]+).zip