我有一个长字符串数组的以下快照:
Array[String] = Array("Tony Stark (USA) 16th October 2015", "Peter Comb (Canada) 21st September 2015")
我希望输出为:
Array[String] = Array("Tony Stark", "Peter Comb")
Array[String] = Array("USA", "Canada")
Array[String] = Array("16th October 2015", "21st September 2015")
我试过这个:
"[.]+\\(([.]+)\\)[.]+"
但它无法解析。什么是解析我的RDD的正则表达式模式?
答案 0 :(得分:2)
(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))
最后修剪清理空白:
"[.]+\\(([.]+)\\)[.]+"
现在到正则表达式:
".+\\((.+)\\).+"
一个角色的角色组很少有意义 - [a] +与a +相同。但是对于点来说它是不同的,它使点成为一个字面点,因为一个点作为一个组中的小丑是没有意义的,它只是。+。
虽然您的示例文本不包含任何文字点,也不包含连续形式的多个文字点,但我猜它只是意味着。+
recyclerview.setLayoutManager(new LinearLayoutManager(this));
但正则表达式可以多种方式使用。 s.replace,s.matches,s.split等。如果没有您使用它的信息,它就不允许进一步推理。
答案 1 :(得分:1)
正则表达式的问题在于[]
内,.
是文字.
而不是通配符。
您还缺少名称和日期周围的群组。正确的正则表达式是(.+)\\((.+)\\)(.+)
。
调用数组a
和正则表达式r
,这会给出:
scala> a.map {case r(name, country,year) => (name, country, year)}
res4: Array[(String, String, String)] = Array(("Tony Stark ",USA," 16th October 2015"), ("Peter Comb ",Canada," 21st September 2015"))
据推测,你也想要匹配这些空间,这样他们就不会被群体拉出来。