以下是字符串, 卡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 +)。
答案 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)