使用正则表达式在分隔的键值字符串中搜索值

时间:2017-04-04 19:15:22

标签: java regex pattern-matching

我有一个以分号分隔的键值对。如何通过提供密钥来搜索值。我需要这个用于Mule软表达式。我知道这可以在java中完成。我正在寻找只有Regex才能找到字符串。

示例:

  

ABC = 123; BCD = 345; EFG = 567

如果我搜索 abc ,它应该给我 123

如何在Regex中执行此操作?它应该忽略/修剪值中的尾随空格。

2 个答案:

答案 0 :(得分:0)

执行此操作的步骤:

  • 首先使用;作为分隔符
  • 将字符串拆分为令牌数组
  • 每个令牌的第二个将其与=分开,其中第一项是键,第二项是值
  • 第三个将这些关键值放入HashMap
  • 使用map.get()方法
  • 获取密钥的值

示例:

String data = "abc=123;bcd=345;efg=567";

HashMap<String, String> map = new HashMap<>();
for (String keyValue : data.split(";")) {
    String[] temp = keyValue.split("=", 2);
    map.put(temp[0], temp[1].trim());
}

System.out.println(map.get("abc"));

答案 1 :(得分:0)

<强> JAVA

没有必要使用regex,您可以使用split()类中的String方法执行此操作。这是一个使用streams的示例:

String line = "abc=123;bcd=345;efg=567";
HashMap<String, String> map = Arrays
    .stream(line.split(";")) //------------> splits the string where a semicolon is found
    .map(val -> val.split("=", 2)) // -----> splits and convert them to the map
    .collect(Collectors
        .toMap(curKey -> curKey[0], // -------> retrieves the key
               curVal -> curVal[1].trim(),//--> retrieves values by trimming white spaces
               (a, b) -> b, HashMap::new));//-> assigns the values

System.out.println(map.get("abc"));

输出: 123

<强> REGEX:

使用正则表达式,您可以使用以下表达式检索值:

([\\w]+)?=([\\w\\s]+)?;?

例如:

String line = "abc=123;bcd=345;efg=567";
String search = "abc"; // -------------------------> key to search the chain
String regex = "([\\w]+)?=([\\w\\s]+)?;?"; // -----> regex expression
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(line);
while (matcher.find()) {
    if (search.equals(matcher.group(1))){
        System.out.println(matcher.group(2).trim()); // ----> Gets the value
    }
}

输出: 123