[英]scala regular expression for string patterns
val fields = Set("abc", "abcd", "abc per", "uio abcd", "yrabc", "entry", "peer")
def matchFields(param: String): Set[String] = ????
如果我向上述matchFields
方法提供輸入"abc"
; 我期望響應為Set("abc", "abcd", "abc per", "uio abcd", "yrabc")
。
我可以借助正則表達式了解scala中的實現建議嗎?
此處無需正則表達式:
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 str@R() => 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個或多個。 .r
創建Regex
從String
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.