scala 正则表达式:从字符串中提取

scala regex : extract from string

我试图从一个大字符串中提取几个值,我很难提取它们,我已经厌倦了几个正则表达式模式,但它们总是没有给我匹配。无论如何,它们似乎可以在可用的在线正则表达式站点中使用,但不能在 Scala 中使用。我想做的是

输入:

ESSSTOR\Disk&Ven_VendorName&Prod_MO_Might_MS_5.0&Rev_6.01765J54U3K4QVR0&0

提取[输出]:

供应商名称

MO_Might_MS_5.0&Rev_6.01

08765J54U3K4QVR0&0

我正在尝试从输入字符串中提取这三个值,但无法这样做。

谁能帮我看看我做错了什么。

提前致谢。

//输入值

  val device:String=  "ESSSTOR\Disk&Ven_VendorName&Prod_MO_Might_MS_5.0&Rev_6.01\08765J54U3K4QVR0&0"

// 用于产品提取的正则表达式构建

           val proReg=  """.*[Prod_]([^\\]*)""".r
                     // """.*Prod_([^\\]*)""".r  -- no match as output
                    // """(?:Prod_)([^\\]*)""".r  -- no match as output

      println("Device: "+device)

    // method -1:   
    device match{

      case proReg(prVal) => println(s"$prVal is product val")
      case _ =>  println("no match")   }

    // method-2 : 

   val proReg(g1) = "ESSSTOR\Disk&Ven_VendorName&Prod_MO_Might_MS_5.0&Rev_6.01\08765J54U3K4QVR0&0"
   println(s"group1: $g1 ")


   O/P:


  Device:  ESSSTOR\Disk&Ven_VendorName&Prod_MO_Might_MS_5.0&Rev_6.01765J54U3K4QVR0&0

   //method-1

   no match

   // method-2

   error

// 开发序列的正则表达式构建

    val serReg = """(?:Prod_\S*[\\])(.*)""".r

    device match {
      case serReg(srVal) => println(s"$srVal is product val")
      case _ => println("no match")
    }


    o/p:

    no match

// 供应商的正则表达式

    val venReg="""(?:Ven_)([^&]*)""".r

    device match {
      case venReg(vnVal) => println(s"$vnVal is vendor val")
      case _ => println("no match")
    }


    o/p:

    no match

看看这是否更接近您想要的。

val pttrn = raw"Ven_([^&]+)&Prod_([^&]+)&Rev_6.01\(.*)".r.unanchored

device match {
  case pttrn(ven, prod, rev) => 
      s"vendor: $ven\nproduct: $prod\nrevNum: $rev"
  case _ => "does not match pattern"
}

说明

Ven_([^&]+) --> 寻找以 Ven_ 开头的内容。捕获不是符号 &.

的所有内容

&Prod_([^&]+) --> 后面应该跟 Prod_ 字符串。捕获不是符号 &.

的所有内容

&Rev_6.01\(.*) --> 后面应该跟以单个反斜杠 \ 结尾的 Rev_ 字符串。捕捉接下来的一切。