我试图在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开始的,所以我对这个有疑问。
提前感谢!
对于您的示例字符串,您可以首先匹配模式,并为fromTo:
之后的部分使用捕获组用逗号分隔第1组的值,如果可以有多个值,则过滤以NT=
开头的值的集合。
fromTo:h+([A-Z]+=[^s,=]+(?:,[A-Z]+=[^s,=]+)*)
Regex演示
在部分中,模式匹配:
fromTo:h+
匹配fromTo:
和1个或多个水平空格(
Capture组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
我们可以在这里使用正则表达式替换:
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