抱歉,如果这是一个蹩脚的问题,我对 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());
最佳答案
这里唯一的一点是你要匹配的字符串是由非空白字符组成的。 \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 个或多个(但尽可能多)非空白符号,
- 逗号。
关于Java 正则表达式 : extract a substring from a pattern occurring multiple times,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39711729/