代码之家  ›  专栏  ›  技术社区  ›  codehunter

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

  •  0
  • codehunter  · 技术社区  · 8 年前

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

    供应商名称

    MO_May_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.01\08765J54U3K4QVR0&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
    
    1 回复  |  直到 8 年前
        1
  •  2
  •   jwvh    8 年前

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

    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_ \ . 捕捉接下来的一切。

    推荐文章