val rdd: Array[String] = Array ("Tony Stark (USA) 16th October 2015", "Peter Comb (Canada) 21st September 2015")
(0 to 2).map (i => rdd.map (_.split ("[\\)\\(]")).map (a=> a(i)))
Vector(Array("Tony Stark ", "Peter Comb "), Array(USA, Canada), Array(" 16th October 2015", " 21st September 2015"))
A final trim cleans up the whitespace:
(0 to 2).map (i => rdd.map (_.split ("[\\)\\(]")).map (a=> a(i).trim))
Vector(Array(Tony Stark, Peter Comb), Array(USA, Canada), Array(16th October 2015, 21st September 2015))
Now to the regex:
"[.]+\\(([.]+)\\)[.]+"
A character group of one character makes rarely much sense - [a]+ is the same as a+. But for the dot it is different, it makes the dot a literal dot, since a dot as joker in a group doesn't make sense, it is just .+ .
While your sample text doesn't contain any literal dot, nor multiple in consecutive form, I guess it was just meant as .+
".+\\((.+)\\).+"
But regexes can be used in multiple ways. s.replace, s.matches, s.split and so on. Without information how you used it, it doesn't allow further reasoning.