我有一个String,其中包含一组属性,如下所示:
"T=Junior Developer, DNQ=13346057, SURNAME=Doe, GIVENNAME=John, SERIALNUMBER=UK"
是否有可以在Java中使用的正则表达式来收集各个属性(例如SURNAME)?
感谢
答案 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)
即使您的姓氏中有,
,第二个也会有效。