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_
字符串。捕捉接下来的一切。
我试图从一个大字符串中提取几个值,我很难提取它们,我已经厌倦了几个正则表达式模式,但它们总是没有给我匹配。无论如何,它们似乎可以在可用的在线正则表达式站点中使用,但不能在 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_
字符串。捕捉接下来的一切。