Перезапись sbt-артефактов с помощью регулярного выражения для удаления информации о версии - PullRequest
2 голосов
/ 11 июля 2011

Требуется гуру 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"

...

EDIT:

Бонусные вопросы:

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 ]

2 голосов
/ 11 июля 2011

Наконец-то я знаю, о чем они говорят с «жадными» и «неохотными» атрибутами ...

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

rewrite( re, in )  // "scala-swing.jar"
rewrite( re, in2 ) // "audiowidgets.jar"
rewrite( re, in3 ) // "jsyntaxpane.jar"
1 голос
/ 12 июля 2011

Возможно, вы могли бы избежать неприятностей и с более простым:

"(.*?)[-_]\\d.*\\.jar".r
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...