在数组字符串中匹配正则表达式模式

时间:2018-04-16 10:38:30

标签: regex scala

我有一个长字符串数组的以下快照:

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的正则表达式模式?

2 个答案:

答案 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"))

据推测,你也想要匹配这些空间,这样他们就不会被群体拉出来。