2014-10-20 82 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

相關問題