首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >scala regex :从字符串中提取

scala regex :从字符串中提取
EN

Stack Overflow用户
提问于 2017-09-14 16:40:33
回答 1查看 1.1K关注 0票数 0

我试图从一个大字符串中提取几个值,我很难提取它们,我已经厌倦了几个正则表达式模式,但它们总是无法与我匹配。无论如何,它们似乎适用于在线regex站点,但在Scala中却不起作用。我想做的是

输入:

ESSSTOR\Disk&Ven_VendorName&Prod_MO_Might_MS_5.0&Rev_6.01\08765J54U3K4QVR0&0

提取输出

供应商名称

MO_Might_MS_5.0&Rev_6.01

08765J54U3K4QVR0&0

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

有人能请我看看我做错了什么吗?

提前谢谢。

//输入值

代码语言:javascript
复制
  val device:String=  "ESSSTOR\\Disk&Ven_VendorName&Prod_MO_Might_MS_5.0&Rev_6.01\\08765J54U3K4QVR0&0"

// Regex产品提取构建

代码语言:javascript
复制
           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

// Regex为dev串行构建

代码语言:javascript
复制
    val serReg = """(?:Prod_\\S*[\\\\])(.*)""".r

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


    o/p:

    no match

//供应商的Regex

代码语言:javascript
复制
    val venReg="""(?:Ven_)([^&]*)""".r

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


    o/p:

    no match
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-14 17:05:14

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

代码语言:javascript
复制
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_字符串。捕捉接下来的一切。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46224398

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档