2011-07-13 196 views
0

解析字符串我有正則表達式

"name"=>"3B Ae", "note"=>"Test fddd \"33 Ae\" FIXME", "is_on"=>"keke, baba" 

一個字符串,我想通過一個Java程序來解析它變成值得注意的是的

name 
3B Ae 
note 
Test fddd \"33 Ae\" FIXME 
is_on 
keke, baba 

段,該字符串的內容,即name,3B Ae,不是固定的。 有什麼建議嗎?

+2

就是你們的榜樣一個輸入字符串或多個輸入字符串(我從keke之間baba改變了,;)? –

回答

4

如果您:

  • 取代=>有:
  • 裹滿弦與{}

結果會是這樣,這是有效的JSON。然後,您可以使用JSON解析器(例如GSON或Jackson)將這些值解析爲java對象。

{ 
    "name": "3B Ae", 
    "note": "Test fddd \"33 Ae\" FIXME", 
    "is_on": "keke, baba" 
} 

如果你有超過產生這個字符串的過程控制,我強烈建議您使用標準格式像JSON或XML,可以更容易地分析在另一端。

+1

這真的很聰明(好抓),但是如果他不控制輸入字符串呢? –

+1

+1爲獨特和有趣的解決方案。 – Perception

+0

完成!簡單而聰明,Thx – user415726

1

由於引用規則,我不能確定一個正則表達式(即使是負面向後看的PCRE)也可以一致地解析它。您可能需要的是使用pushdown automaton或其他能夠處理上下文無關語言的解析器。

-1

如果你能確保你的數據(鍵或值)不具有=>,(或發現會不會發生一些其他的分隔符),該解決方案是非常簡單的:

  • 斯普利特字符串由,你得到key => value
  • 斯普利特關鍵value => pairs通過=>你得到你想要

如果inputString HOL什麼DS
"name"=>"3B Ae", "note"=>"Test fddd \"33 Ae\" FIXME", "is_on"=>"keke baba"
(從例如文件)

String[] keyValuePairs = inputString.split(","); 
    for(String oneKeyValue : keyValuePairs) 
    { 
     String[] keyAndValue = oneKeyValue.split("=>"); 
    } 
+0

分割,不會給名稱=>值對,因爲逗號可能出現在值的內部(例如「keke,baba」) –

+0

@Moe,是的。這就是我的答案的開始_如果你可以確保你的數據(鍵或值)沒有=>或a_,並且我明確提到_(我已經改變了,來自keke和baba之間)。如果OP對數據有控制權,這應該很容易做到,我認爲這更直接(JSON想法很酷,但是) – Nivas