正则表达式 – 如何将字符串与另一个字符串进行比较,其中一个字符串具有空格

我如何比较这两个字符串:

val a = "fit bit versa"
val b = "fitbit"

另一个例子

val a = "go pro hero 6"
val b = "gopro"

另一个例子

val a = "hero go pro  6"
val b = "gopro"

另一个例子

val a = "hero 6 go pro"
val b = "gopro"

我希望上述比较得到“真实”,但不是这里:

val a = "vegan protein powder"
val b = "vega"

这应该是假的.

目前我在做:

def matchPattern(a:String, b: String):String=
{
      val dd = a.split(" ")
      val result = dd.map(_.toLowerCase())
      if(result contains b.toLowerCase) true 
      else false
}

这适用于最后一种情况但不适用于其他情况.

有什么建议吗?

最佳答案
这是一种使用滑动(i)的方法,其中i的范围从2到字数,用于组合所有可能的连接相邻字的列表.然后检查b是否与列表中的任何元素完全匹配,如下所示:

def matchPattern(a: String, b: String): Boolean = {
  val words = a.toLowerCase.split("\\s+")

  val concats = (2 to words.size).foldLeft(words)(
    (acc, i) => acc ++ words.sliding(i).map(_.mkString)
  )

  concats contains b.toLowerCase
}

matchPattern("Hero go Pro 6", "gopro")
// res1: Boolean = true

matchPattern("Hero go Pro 6", "gopro6")
// res2: Boolean = true

matchPattern("Vegan protein powder", "vega")
// res3: Boolean = false

转载注明原文:正则表达式 – 如何将字符串与另一个字符串进行比较,其中一个字符串具有空格 - 代码日志