You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用正则表达式提取子串的Scala 2.11实现问询

没问题,我来帮你把Perl里的正则提取逻辑无缝迁移到Scala 2.11中~

你的核心需求是用(\d*)\*(C.*)这个正则捕获两个分组:第一个是数字部分32,第二个是从C开始的剩余字符串C1234*3,Scala里有两种常用的实现方式,和Perl的逻辑完全对齐:

方式一:用Scala模式匹配(最简洁惯用)

这种写法和Perl里的匹配赋值逻辑最像,直接把字符串和正则模式绑定,匹配成功后自动提取分组:

val s = "32*C1234*3"
val re = """(\d*)\*(C.*)""".r

s match {
  case re(x1, x2) => println(s"x1 = $x1, x2 = $x2")
  case _ => println("No match")
}

运行后会输出:x1 = 32, x2 = C1234*3

方式二:通过Match对象提取分组

如果需要更灵活的处理(比如遍历多个匹配结果),可以用findFirstMatchIn获取匹配对象,再通过group方法提取分组:

val s = "32*C1234*3"
val re = """(\d*)\*(C.*)""".r

re.findFirstMatchIn(s) match {
  case Some(matchRes) =>
    val x1 = matchRes.group(1)
    val x2 = matchRes.group(2)
    println(s"x1 = $x1, x2 = $x2")
  case None => println("No match")
}

这里要注意,你之前尝试的findFirstIn返回的是整个匹配的字符串,而不是包含分组的匹配对象,所以没法直接拿到x1和x2,换成findFirstMatchIn就可以解决这个问题啦。

内容的提问来源于stack exchange,提问作者Terry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:09:23