我已经喜欢斯卡拉更换由正则表达式
val bar = "M9A9K9foo-M9A9K9foo-M9A9K9foo-M9A9K9foo-M9A9K9foo-M9A9K9foo-M9A9K9foo".
字符串现在我拆分此字符串并定义图案
val split = bar.split("-")
val pattern = ".*(A|K)\\d.*".r
,现在我想更换A9K9foo在“分裂的最后一个条目“
val last = split.last
val suffix = last match {
case pattern(_) => last replaceFirst ("""(A\d)?(K\d)?.*""", "")
case _ => last
}
我所知道的是,replaceFirst被执行,但它不会在我的替代A9K9foo‘最后’VAL (REPL aceFirst应该只在'last'匹配'pattern'时执行),通缉的结果是M2。
编辑:它可能发生的最后不是M9A9K9foo,而是M9A9或M9K9foo或M9A9K9。我想要的只是替换除A \ d或K \ d之前的文本之外的所有内容,但如果没有A \ d或K \ d,则不会发生任何事情。
你知道为什么这个替换不起作用吗?
非常奇怪的事情想要做,你能提供更多的上下文,我们可能能够建议一个完全不同的方式 - 希望避免正则表达式! :) – samthebest 2014-09-07 03:59:07
没有更多的上下文,我只想每次的M9字符串 – ChampS 2014-09-07 07:05:31