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/