Scala 获取一个子串
Scala get a substring
我正在尝试在 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 开始的,因此我对此有疑问。
提前致谢!
我们可以在这里使用正则表达式替换:
val input = "fromTo: NT=xxx_bt_bsns_m,OD=ntis,OS=wnd,SX=xs,SZ=ddp"
val output = input.replaceAll("^.*\bNT=([^,]+).*$", "")
println(output) // xxx_bt_bsns_m
对于您的示例字符串,您可以先匹配模式,然后对 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
我正在尝试在 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 开始的,因此我对此有疑问。
提前致谢!
我们可以在这里使用正则表达式替换:
val input = "fromTo: NT=xxx_bt_bsns_m,OD=ntis,OS=wnd,SX=xs,SZ=ddp"
val output = input.replaceAll("^.*\bNT=([^,]+).*$", "")
println(output) // xxx_bt_bsns_m
对于您的示例字符串,您可以先匹配模式,然后对 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