Java Regex:从多次出现的模式中提取子字符串

时间:2016-09-26 20:22:09

标签: java regex

很抱歉,如果这是一个蹩脚的问题,我对Java开发和正则表达式模式都很陌生。

基本上我有一个长字符串,它有多个子字符串,例如InstanceId: i-1234XYAadsadd,,我希望使用正则表达式提取i-1234XYAadsadd中的ArrayList部分。请在这里帮助正确的正则表达式。

//instanceResultString is the actual string containing occurences of pattern
List<String> instanceIdList = new ArrayList<String>(); 
    Matcher matcher = Pattern.compile("InstanceId:[.]*,").matcher(instanceResultString);
    while(matcher.find())
        instanceIdList.add(matcher.group());

1 个答案:

答案 0 :(得分:1)

此处唯一的一点是,您要匹配的字符串由非空白字符组成。 \S模式匹配非空白字符。

请参阅this demo

String instanceResultString = "InstanceId: i-1234XYAadsadd, More text: InstanceId: u-222tttt, dde InstanceId: i-8999UIIIgjkkd,";
List<String> instanceIdList = new ArrayList<String>();
Matcher matcher = Pattern.compile("InstanceId:\\s*(\\S+),").matcher(instanceResultString);
while(matcher.find())
    instanceIdList.add(matcher.group(1));
System.out.println(instanceIdList); // Demo line
// => [i-1234XYAadsadd, u-222tttt, i-8999UIIIgjkkd]

其中

  • InstanceId: - 文字InstanceId:文字
  • \\s* - 零个或多个空格
  • (\\S+) - 第1组(我们使用.group(1)获取这些内容)捕获1个或更多(但尽可能多)非空白符号
  • , - 逗号。