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

发布于 2024-11-19 12:33:43 字数 824 浏览 4 评论 0原文

RegEx 大师想要:我想在打包 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")

RegEx guru wanted: I want to strip library names in packaging an sbt project. Namely if my dependency is called

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

I want to re-write the name as

"scala-swing.jar"

E.g. given a method

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

I tried

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

and

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

...

EDIT:

Bonus questions:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

久光 2024-11-26 12:33:43

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

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

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

Finally I know what they are talking about with the 'greedy' and 'reluctant' attributions...

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

rewrite( re, in )  // "scala-swing.jar"
rewrite( re, in2 ) // "audiowidgets.jar"
rewrite( re, in3 ) // "jsyntaxpane.jar"
楠木可依 2024-11-26 12:33:43

你或许也可以采用更简单的方法:

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

You could perhaps get away with something simpler too:

"(.*?)[-_]\\d.*\\.jar".r
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文