Java String Regex拆分和捕获拆分部分

时间:2014-07-31 10:56:40

标签: java regex

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

我想以某种方式分裂,以便我应该有(41,SFC),(42,SFC),(43,GFC),(44,肯德基)的地图.... 目前iam使用这个正则表达式" \ s *卡\ s * \ d + \ s *:",是否可以使用相同的正则表达式进行拆分和捕获,就像我的意思是我想用&#34拆分; \ S *卡\ S *(\ d +)\ S *:"并捕获(\ d +)。

3 个答案:

答案 0 :(得分:2)

这是您想要实现的目标的一个例子。

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}

答案 1 :(得分:1)

要标记,请使用“捕获组”

这个正则表达式将解析你的字符串:

Card (\d+): Slot Type : (\w+)

正如您在 Regex Demo 右侧窗格中所看到的,捕获第1组和第2组包含您想要的元组。

示例Java代码

以下是检索元组的方法:

Pattern regex = Pattern.compile("Card (\\d+): Slot Type : (\\w+)");
Matcher regexMatcher = regex.matcher(subjectString);
while (regexMatcher.find()) {
    // The Card
    System.out.println(regexMatcher.group(1));
    // The Slot Type
    System.out.println(regexMatcher.group(2));
} 

当然,不是打印值,而是将它们分配给您喜欢的任何数据结构。

<强>解释

  • Card匹配文字字符
  • (\d+)将数字捕获到第1组
  • : Slot Type :匹配文字字符
  • (\w+)将广告位类型捕获到第2组

答案 2 :(得分:0)

Card (\d+):.+?: ?(\w+)应该使用全局修饰符。

  • (\d+)捕获Card
  • 之后的数字
  • (\w+)捕获第二个分号后的字母

Demo on RexEx101