2010-01-19 56 views
2

我試圖創建一個正則表達式來標記一個字符串。一個示例字符串會是。RegEx到Tokenize字符串

John Mary, "Name=blah;Name=blahAgain" "Hand=1,2" 

我試圖找回:

  • 約翰
  • 瑪麗
  • 名稱=等等;名稱= blahAgain
  • 手= 1,2
+0

一個例子(沒有任何進一步的說明)可能不夠。 「Name = blah; Name = blahAgain」'裏面可以有'''''可能不會,但是這並不會傷害到知道。'Name = blah; Name = blahAgain「'裏面的空格呢?名字總是兩個單獨的名字嗎?喬·埃倫·彼得,......(喬·埃倫和彼得)怎麼樣?僅舉幾例可能存在問題的案例 – 2010-01-19 19:45:47

回答

1

對於這個具體的例子,我會這樣做:

([^\s]*)\s+([^,\s]*)\s*,\s*"([^"]*)"\s+"([^"]*)" 

更新:修改拆分瑪麗和約翰

+0

感謝您的建議,但我是使用java中的掃描器類,它似乎並不喜歡它 – binarymelon 2010-01-19 18:46:15

+0

@slebetman:瑪麗和約翰不會與你的正則表達式分開 – 2010-01-19 19:02:32

+0

這很奇怪,我很肯定上述是相當簡單的老派正規表達式,沒有任何怪異的PCRE或egrep東西你確定你已經用''''在java中逃脫了''' – slebetman 2010-01-19 19:03:00

1

這很容易:

([^ ])+ 
+0

這將得到瑪麗以及逗號後的逗號。它也不會一次捕獲所有需要的字段。 – ferdystschenko 2010-01-19 20:05:09

+0

實際上,它每次只捕獲一個字符,除非你把'+'放入了隱含的內容。 – ferdystschenko 2010-01-19 20:07:47

0

由於您使用的Java,爲什麼不使用的StringTokenizer?例如: -

StringTokenizer st = new StringTokenizer("String to tokenize", " "); 
while (st.hasMoreTokens()) 
{ 
    // get next token 
    String someVariable = st.nextToken(); 
} 
0

這適用於你的例子:

(\w+) (\w+), \"([^"]+)" \"([^"]+) 

貴公司的所有字符串有完全相同的模式?

0

一種可能的方式:在拆分,後跟一個space或在spacequotation mark之一:

"John Mary, \"Name=blah;Name=blahAgain\" \"Hand=1,2\"".split(",\\s|[\\s\"]")