Scala获取子字符串



我试图在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

相关内容

  • 没有找到相关文章

最新更新