2016-06-09 25 views
1

我正在尋找形成一個正則表達式來解析具有以下格式的字符串,並將其作爲鍵值與[測試,2]和值分離爲鍵值對如11等..正則表達式在鍵值中用逗號和[]解析鍵值對

[test,2]=11, [test,3]=12, [test,7]=11, [test,11]=4, [test,16]=5 

一旦正確的正則表達式被形成,我可以使用這種方式來加載作爲密鑰值對組合成映射

<REGEX_PATTERN>.findAllMatchIn(input).map(m => (m.group(1).trim(), m.group(2).trim())).toMap 

欣賞與正則表達式模式的任何指針。

+0

你能指定輸出'Map'的類型?第一組和第二組的預期值是多少? –

+0

嗨謝爾蓋,從Nyavro下面的答案是我正在尋找。不過謝謝 – codehammer

回答

2

嘗試模式是這樣的:

val pattern = "(\\[\\w+,\\d+\\])=(\\d+)(,\\s)?"r 

例子:

scala> val input = """[test,2]=11, [test,3]=12, [test,7]=11, [test,11]=4, [test,16]=5""" 
input: String = [test,2]=11, [test,3]=12, [test,7]=11, [test,11]=4, [test,16]=5 

scala> val pattern = "(\\[\\w+,\\d+\\])=(\\d+)(,\\s)?"r 
warning: there were 1 feature warning(s); re-run with -feature for details 
pattern: scala.util.matching.Regex = (\[\w+,\d+\])=(\d+)(,\s)? 

scala> val m = pattern.findAllMatchIn(input).map(m => (m.group(1).trim(), m.group(2).trim())).toMap 
m: scala.collection.immutable.Map[String,String] = Map([test,2] -> 11, [test,16] -> 5, [test,11] -> 4, [test,3] -> 12, [test,7] -> 11) 

scala> m foreach println 
([test,2],11) 
([test,16],5) 
([test,11],4) 
([test,3],12) 
([test,7],11)