2015-05-02 75 views
0
val fields = Set("abc", "abcd", "abc per", "uio abcd", "yrabc", "entry", "peer") 

def matchFields(param: String): Set[String] = ???? 

如果我在上面提供輸入​​到matchFields方法;我期待的迴應爲Set("abc", "abcd", "abc per", "uio abcd", "yrabc")斯卡拉字符串模式的正則表達式

我可以通過正則表達式瞭解scala中的實現建議嗎?

回答

1

無需這裏正則表達式:

def matchFields(param: String): Set[String] = fields.filter(_.contains(param)) 

scala> matchFields("abc") 
res0: Set[String] = Set(uio abcd, abc, abc per, yrabc, abcd) 

contains檢查一個字符串是另一個的子串,filter過濾掉的元素,這不符合給定的斷言。

如果你真正想要的正則表達式:

import scala.util.matching._ 

scala> def matchFields(R: Regex): Set[String] = fields.collect{case [email protected]() => str} 
matchFields: (R: scala.util.matching.Regex)Set[String] 

scala> matchFields(".*abc.*".r) 
res5: Set[String] = Set(uio abcd, abc, abc per, yrabc, abcd) 

或者:

scala> def matchFields(R: Regex): Set[String] = fields.flatMap(R.findFirstIn) 
matchFields: (R: scala.util.matching.Regex)Set[String] 

scala> matchFields(".*abc.*".r) 
res7: Set[String] = Set(uio abcd, abc, abc per, yrabc, abcd) 

.*指0或以上的象徵。 .rString創建Regex

相關問題