从String中提取属性的任何正则表达式?

时间:2014-10-20 10:52:34

标签: java regex


我有一个String,其中包含一组属性,如下所示:

"T=Junior Developer, DNQ=13346057, SURNAME=Doe, GIVENNAME=John, SERIALNUMBER=UK"

是否有可以在Java中使用的正则表达式来收集各个属性(例如SURNAME)?
感谢

2 个答案:

答案 0 :(得分:3)

这个小例子展示了如何在示例字符串中访问属性名称及其值。这适用于字符串中的所有属性和值。

import java.util.regex.Matcher;
import java.util.regex.Pattern;

class Test {
  public static void main(String[] args) {
    String s = "T=Junior Developer, DNQ=13346057, SURNAME=Doe, GIVENNAME=John, SERIALNUMBER=UK";
    Matcher m = Pattern.compile("(?:, )?([^=]+)\\=([^,]+)").matcher(s);
    while (m.find()) {
      System.out.println(m.group(1) + " - " + m.group(2));
    }
  }
}

正则表达式的解释:

(?:, )?([^=]+)\\=([^,]+)
  • (?:, )?是一个非捕获组,可以但不必发生。它通过逗号和属性 - 值对之间的空格来匹配分隔。
  • ([^=]+)是一个匹配一个或多个字符的组,直到=出现。
  • \\==匹配。这是一个特殊的角色,因此必须逃脱。
  • ([^,]+)会匹配一个或多个字符,直至下一个,,当下一个属性开始时。

答案 1 :(得分:2)

SURNAME=[^,]+

你可以使用它。或者更安全你也可以使用

SURNAME=.*?(?=,\s)

即使您的姓氏中有,,第二个也会有效。