Java 正则表达式 : extract a substring from a pattern occurring multiple times

标签 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());

最佳答案

这里唯一的一点是你要匹配的字符串是由非空白字符组成的。 \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/

相关文章:

java - 有没有办法让Java中的数组真正私有(private)?

java - 安卓 : Findviewbyid() returns null

在检查的匹配项上收到 C++ 正则表达式空字符串

javascript - regExp 接受任何格式的所有特殊字符至少一个数字一个大写一个字母

java - 在 try block 内,FileIStream 变量可能尚未初始化错误

java - Java 中的信号量。生产者-消费者问题

python - 确保组匹配不以特定字符结尾的正则表达式

python - 将字符串元组转换为字典

javascript - 向正则表达式添加点 (.)

java - Jackson 解析器 json setter 将值作为字符串数组