regex - 使用正则表达式匹配器重写 sbt 工件以去除版本信息

标签 regex scala sbt

RegEx 大师想要:我想在打包 sbt 项目时去掉库名称。也就是说,如果我的依赖项被调用

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

我想将名称重写为

"scala-swing.jar"

例如给定一个方法

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")

最佳答案

我终于知道他们在谈论“贪婪”和“不情愿”的属性了......

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

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

关于regex - 使用正则表达式匹配器重写 sbt 工件以去除版本信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6654594/

相关文章:

正则表达式 - 如何用下划线替换文件名中的句点

regex - 如何将所有正则表达式匹配项放入字符串列表

java - 如何使用模式匹配替换子字符串

scala - Sbt 项目依赖于外部和私有(private) github 存储库

scala - PlayFramework 2.5 : SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder"

java - 为什么 Java 中的正则表达式无法将 s 识别为空格字符?

scala - 删除对具有 Unit 返回类型的函数的调用时发生奇怪的 Scala 编译器错误,这怎么可能?

class - 从抽象类继承的案例类

docker - 如何使用 unmanagedBase 对添加外部库的 Scala 项目进行 dockerize?

java - IntelliJ Build 不执行 sbt 'compile' 依赖