我有一个包含类似以下一组属性的字符串:任何正则表达式从字符串中提取属性?
"T=Junior Developer, DNQ=13346057, SURNAME=Doe, GIVENNAME=John, SERIALNUMBER=UK"
是否有可以在Java中被用来收集各个属性(比如姓)正则表达式?
感谢
我有一个包含类似以下一组属性的字符串:任何正则表达式从字符串中提取属性?
"T=Junior Developer, DNQ=13346057, SURNAME=Doe, GIVENNAME=John, SERIALNUMBER=UK"
是否有可以在Java中被用来收集各个属性(比如姓)正则表达式?
感谢
SURNAME=[^,]+
您可以使用this.Or更安全,你还可以使用
SURNAME=.*?(?=,\s)
即使你在你的姓有,
第二个会工作。
这个小例子展示了如何访问示例字符串中的属性名称及其值。这适用于字符串中的所有属性和值。
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));
}
}
}
说明正则表达式的:
(?:,)?([^=]+)\\=([^,]+)
(?:,)?
是一个非捕获组可以,但不是必须发生。它通过属性值对之间的逗号和空格来匹配分隔符。([^=]+)
是一个匹配一个或多个字符的组,直到出现=
。\\=
与=
相符。这是一个特殊的角色,因此必须逃脱。([^,]+)
匹配一个或多个字符直到下一个,
,当下一个propery将开始。谢谢!你的例子也工作。无论如何,我选择了第一个答复,只是按时间分配 – user2824073 2014-10-20 11:28:44
这看起来像CSV。来源是什么? – nhahtdh 2014-10-20 10:54:10
请务必记住,正则表达式用于获取/匹配字符串中的字符串序列。所以了解姓氏的格式非常重要。 SURNAME = [^,] +可以是一个很好的解决方案,但如果姓氏可以包含逗号字符,则不起作用...因此,在尝试用正则表达式匹配之前,您必须准确定义所有可能姓氏的格式 – 2014-10-20 11:03:01