当前位置: 首页 > 知识库问答 >
问题:

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

宗政才俊
2023-03-14

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

输入:

ESStor \磁盘

提取[输出]:

供应商名称

MO_May_MS_5.0

08765J54U3K4QVR0

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

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

提前谢谢。

//输入值

  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个答案

晁英彦
2023-03-14

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

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_([^

<代码>

<代码>

 类似资料:
  • 问题内容: 我需要从此字符串中提取日期: BB通知:在04/10的11:28购买您的壁虱,最终卡号xxxx,$ 00,00。如果您不认识,请致电40032 2412。 也是整个日期04/04/2015 日期格式为dd / MM或dd / MM / yyyy 代码: String mydata =“ BB告知:在04/10的11:28,购买您的tickect,最终卡号xxxx,$ 00,00。如果您

  • 我在一个多语言网站上工作,并已选择使用每种语言的自定义URL,例如: 两者都指向城市控制员的指数方法。 在每个页面上都有一个切换语言的选项,它会在我的路由中查找以匹配控制器、视图和语言。 因此,如果我在荷兰语页面上,它会找到英文版的正确网址,即“城市”而不是“steden”。 在我开始使用更复杂的正则表达式之前,一切都很好。 我有这些正则表达式,它们将匹配我所需的URL: 在我的代码中,我可以访问

  • 问题内容: 我有这串 并且我需要提取这3个子字符串 1234 06:30 07:45 如果我使用此正则表达式\\ d {2} \:\\ d {2}我只能提取第一个小时的06:30 matcher.group(1)引发异常。 另外我也不知道如何提取1234。此字符串可以更改,但总是在’XX〜’之后 。您对如何将这些字符串与正则表达式匹配有任何想法吗? 更新 多亏了亚当的建议,我现在有了这个正则表达式

  • 问题内容: 在一个应用程序中,我得到了包含IP地址的字符串,但是这些字符串没有精确的格式。我们所知道的是,这些字符串可能包含IP地址。 这是字符串的示例: “ XPSPort” “ IP_10.29.167.187” “ 10.29.166.193” 我想获得一个Java代码,如果有一个Java代码,则提取该字符串的IP地址;如果该字符串不包含IP地址,则返回“”。 我尝试了这段代码,但它不起作用

  • 我有一个包含数千行的文本文件。这里有一个例子 我试图提取'nt60'、'nt50'末尾的字符串。 问题是会包含行尾字符() 我想使用正则表达式搜索来匹配从 (') 开始的字符串,但我不知道我应该用什么来匹配 。 有人能帮忙吗?

  • 我不熟悉Javascript和正则表达式,所以我一直在研究如何使路由匹配所有以