使用正则表达式匹配器重写sbt工件以剥离版本信息

时间:2011-07-11 18:18:11

标签: regex scala sbt

RegEx guru想要:我想在打包sbt项目时删除库名。即,如果我的依赖被称为

val in = "scala-swing-2.9.0-1.jar"

我想将名称重写为

"scala-swing.jar"

E.g。给出一个方法

def rewrite(p: util.matching.Regex, s: String) = s match {
  case p(name) => name + ".jar"
  case _       => s
}

我试过

rewrite("""([^-_]*)[-_].*.jar""".r, in)  // gives "scala.jar"

rewrite("""(.*)[-_]\d.*.jar""".r, in)    // gives "scala-swing-2.9.0.jar"

...

修改

奖金问题:

val in2 = "audiowidgets_2.9.0-1-0.10-SNAPSHOT.jar"
require(rewrite( ???, in2 ) == "audiowidgets.jar")

val in3 = "jsyntaxpane-0.9.5-b29.jar"
require(rewrite( ???, in3 ) == "jsyntaxpane.jar")

2 个答案:

答案 0 :(得分:2)

最后,我知道他们在谈论'贪婪'和'不情愿'的归因......

val re = """(.*?)(?:[-_](?:(?:[^-_]*\d)|SNAPSHOT))+.jar""".r

rewrite( re, in )  // "scala-swing.jar"
rewrite( re, in2 ) // "audiowidgets.jar"
rewrite( re, in3 ) // "jsyntaxpane.jar"

答案 1 :(得分:1)

你也许可以通过更简单的方式逃脱:

"(.*?)[-_]\\d.*\\.jar".r