我试图从一个大字符串中提取几个值,我很难提取它们,我已经厌倦了几个正则表达式模式,但它们总是无法与我匹配。无论如何,它们似乎适用于在线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
我试图从输入字符串中提取这三个值,但无法这样做。
有人能请我看看我做错了什么吗?
提前谢谢。
//输入值
val device:String= "ESSSTOR\\Disk&Ven_VendorName&Prod_MO_Might_MS_5.0&Rev_6.01\\08765J54U3K4QVR0&0"// Regex产品提取构建
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串行构建
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
val venReg="""(?:Ven_)([^&]*)""".r
device match {
case venReg(vnVal) => println(s"$vnVal is vendor val")
case _ => println("no match")
}
o/p:
no match发布于 2017-09-14 17:05: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_([^&]+) ->寻找以Ven_开头的东西。捕获所有不是符号和&的内容。
&Prod_([^&]+) ->应该后面跟着Prod_字符串。捕获所有不是符号和&的内容。
&Rev_6.01\\(.*) -后面应该是以一个反斜杠\结尾的Rev_字符串。捕捉接下来的一切。
https://stackoverflow.com/questions/46224398
复制相似问题