我正在嘗試在 Scala 中獲取一個子字串。我擁有的字串如下:
fromTo: NT=xxx_bt_bsns_m,OD=ntis,OS=wnd,SX=xs,SZ=ddp,
fromTo: NT=xds_bt2_bswns_m,OD=nis,OS=wnd,SX=xs,SZ=ddp,
fromTo: NT=xxa_bt1_b1ns_m,OD=nts,OS=nd,SX=xs,SZ=ddp
我只想得到一個子字串:
xxx_bt_bsns_m
編輯:這個子串可以是其他的,例如 ddd_zn1_ldk
那么我必須嘗試獲取所有以 NT 開頭并以“,”結尾的字串嗎?
我從 Scala 開始,因此我對此表示懷疑。
提前致謝!
uj5u.com熱心網友回復:
我們可以在這里使用正則運算式替換:
val input = "fromTo: NT=xxx_bt_bsns_m,OD=ntis,OS=wnd,SX=xs,SZ=ddp"
val output = input.replaceAll("^.*\\bNT=([^,] ).*$", "$1")
println(output) // xxx_bt_bsns_m
uj5u.com熱心網友回復:
對于您的示例字串,您可以先匹配模式,然后對部分使用捕獲組 fromTo:
在逗號上拆分組 1 值,NT=如果可以有多個值,則過濾以 開頭的值的集合。
fromTo:\h ([A-Z] =[^\s,=] (?:,[A-Z] =[^\s,=] )*)
正則運算式演示
在部分,模式匹配:
fromTo:\h匹配fromTo:和 1 個或多個水平空格(捕獲組 1[A-Z] =[^\s,=]匹配 1 個大寫字符=和 1 個除,=空白字符以外的字符(?:,[A-Z] =[^\s,=] )*可選地重復相同的逗號
)關閉第 1 組
例如
val s = "fromTo: NT=xxa_bt1_b1ns_m,OD=nts,OS=nd,SX=xs,SZ=ddp,NT=aaaaaa fromTo: NT=bbbbbbbbb"
val pattern = """fromTo:\h ([A-Z] =[^\s,=] (?:,[A-Z] =[^\s,=] )*)""".r
val result: Iterator[Array[String]] = pattern.findAllMatchIn(s).map(m =>
m.group(1)
.split(",")
.filter(s => s.startsWith("NT=")))
result.foreach(a => a.foreach(println))
輸出
NT=xxa_bt1_b1ns_m
NT=aaaaaa
NT=bbbbbbbbb
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/333174.html
上一篇:在Akka流中連接兩個流
