以下是字符串,
卡41:
  插槽类型:SFC
卡42:
  插槽类型:PFC
卡43:
  插槽类型:GFC
  运行状态:空
卡44:
  插槽类型:肯德基
卡45:
  插槽类型:SFC

我想以某种方式拆分,以便我应该具有(41,SFC),(42,SFC),(43,GFC),(44,KFC)...的地图。
目前我正在使用此正则表达式“ \ s * Card \ s * \ d + \ s *:”,是否可以使用相同的正则表达式进行拆分和捕获,就像我的意思是我想使用“ \ s * Card \ s *( \ d +)\ s *:“,并捕获(\ d +)。

最佳答案

这是您想要实现的示例。

String input = "Card 41: Slot Type : SFC Card 42: Slot Type : " +
                "PFC Card 43: Slot Type : GFC Operational State : Empty " +
                "Card 44: Slot Type : KFC Card 45: Slot Type : SFC";
//                           | starts with "Card"
//                           |   | any white space
//                           |   |   | group 1: any digits
//                           |   |   |     | any characters, reluctantly
//                           |   |   |     |  | group 2: looking for 3 capital letter characters
Pattern p = Pattern.compile("Card\\s+(\\d+).+?([A-Z]{3})");
Matcher m = p.matcher(input);
// key set of map will be ordered lexicographically
// if you want to retain insertion order instead, use LinkedHashMap
// for better performance, just a HashMap
Map<String, String> map = new TreeMap<String, String>();
// iterate over find
while (m.find()) {
    map.put(m.group(1), m.group(2));
}
System.out.println(map);


输出量

{41=SFC, 42=PFC, 43=GFC, 44=KFC, 45=SFC}

10-01 12:30