2014-10-20 84 views
0


我有一个包含类似以下一组属性的字符串:任何正则表达式从字符串中提取属性?

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

是否有可以在Java中被用来收集各个属性(比如姓)正则表达式?
感谢

+0

这看起来像CSV。来源是什么? – nhahtdh 2014-10-20 10:54:10

+0

请务必记住,正则表达式用于获取/匹配字符串中的字符串序列。所以了解姓氏的格式非常重要。 SURNAME = [^,] +可以是一个很好的解决方案,但如果姓氏可以包含逗号字符,则不起作用...因此,在尝试用正则表达式匹配之前,您必须准确定义所有可能姓氏的格式 – 2014-10-20 11:03:01

回答

2
SURNAME=[^,]+ 

您可以使用this.Or更安全,你还可以使用

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

即使你在你的姓有,第二个会工作。

2

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

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将开始。
+0

谢谢!你的例子也工作。无论如何,我选择了第一个答复,只是按时间分配 – user2824073 2014-10-20 11:28:44

相关问题