斯卡拉正则表达式模式给matcherror

时间:2018-06-04 11:56:15

标签: regex scala

我有一个字符串

val path = "/bigdatahdfs/datalake/raw/lum/creditriskreporting/iffcollateral/year=2017/month=05/approach=firb/basel=3/version_partition=8/vFirbtestCollateralBaselIIIData_201705_8_20170620.txt.gz"

模式

.*version_partition=(\d+)(.*) 

在regex101.com中按预期工作。

要求是提取两个字符串。一个是“8”(恰好在version_partition =之后),另一个是“/vFirbtestCollat​​eralBaselIIIData_201705_8_20170620.txt.gz”

在scala REPL中,相同的模式给出了scala.MatchError。我是使用正则表达式的新手。不知道我在这里做错了什么。请帮帮我。

scala代码

val P = """.*version_partition=(\d+)(.*)""".r

val P(ver,fileName) = path;

我也试过/ g和/ m标志。它不起作用。

3 个答案:

答案 0 :(得分:1)

您的代码有效:https://scalafiddle.io/sf/Xz1Y0Ze/0

你不需要/ g和/ m标志。

  • / g ==>执行全局匹配(找到所有匹配而不是停止 在第一场比赛后)
  • / m ==>执行多行匹配

代码:

val path = "/bigdatahdfs/datalake/raw/lum/creditriskreporting/iffcollateral/year=2017/month=05/approach=firb/basel=3/version_partition=8/vFirbtestCollateralBaselIIIData_201705_8_20170620.txt.gz"

val P = """.*version_partition=(\d+)(.*)""".r

val P(ver,fileName) = path;

println(ver)
println(fileName)

答案 1 :(得分:0)

尝试使用这样的匹配:

val path = "/bigdatahdfs/datalake/raw/lum/creditriskreporting/iffcollateral/year=2017/month=05/approach=firb/basel=3/version_partition=8/vFirbtestCollateralBaselIIIData_201705_8_20170620.txt.gz"
val P = """.*version_partition=(\d+)(.*)""".r

path match {
  case P(a,b) ⇒ 
    println(a)
    println(b)
}

Test

答案 2 :(得分:0)

你不小心在最后添加了一个空格。

https://regex101.com/r/FLkZEu/2

正则表达式开头的.*无用