簡體   English   中英

字符串模式的scala正則表達式

[英]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創建RegexString

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM