Scala中正则表达式匹配文件名

时间:2016-01-30 17:23:54

标签: regex scala

我正在创建文件,并且想要创建一个新的文件名(如果它已经存在),就像OS X / windows对附加的(1)一样。

我现在正在学习Scala,即使我确定那里已经有了一种方法;如果没有它,我非常想知道如何做到这一点。

我的目标是通过private def doesFileExist(completeFilename: String) : Boolean = { logger.info("Checking if file already exists") Files.exists(Paths.get(completeFilename)) }

查看文件是否存在

然后如果是的话我想附加文件名。因为我需要检查文件名是否已经更新,我认为它是最简单的正则表达式,看看是否有"/^[a-zA-Z0-9_-][\\d{1,2}][a-z0-9_\\.]{3,4}$/"之类的内容 我认为哪个适合,我可能错了,我还没有能够测试它。 :)

无论我阅读了多少篇文章,我都无法编译它,因此我不确定如何修复它:

val RegexPattern = "/^[a-zA-Z0-9_-][\\d{1,2}][a-z0-9_\\.]{3,4}$/".r

  if (fileName.matches(RegexPattern)) {

  }

这显然失败了,因为它期待一个字符串但我给它正则表达式。然后我尝试了一场比赛......

  fileName match {
    case RegexPattern => println("Etf")
  }

但这也是不正确的。感谢任何帮助,谢谢。

编辑:在线查找示例后略有不同的方法。

val pattern = "([0-9]+) ([A-Za-z]+)".r
  val pattern(count, fruit) = "100 Bananas"
  println(pattern)
  println(count)
  println(fruit)



  val RegexPattern = "(.+(?=\\/))(\\/)(.+(?=\\.))".r
  val RegexPattern(dir, delimeter, file) = "direct/ory/filename.ext"

  println(dir + " - " )
注意,bona示例工作正常,但是我没有。正则表达式在测试时有效。

1 个答案:

答案 0 :(得分:0)

以防这可以帮助别人:

我没有意识到正则表达式需要匹配我正在比较的确切字符串。

val RegexPattern = "(.+(?=\\/))(\\/)(.+(?=\\.))".r的旧模式忽略了最后的扩展。我认为,看到我并不关心它,我不需要将它包含在模式中。愚蠢地期望它与第一个匹配并省略其余部分。

使用以下简单的示例玩时,这一点变得清晰:

val x = "(\\w)(\\w)".r
  val x(c, s) = "an"
  println(c, s)

如果你删除了'它抱怨,相似如果你没有更新正则表达式屁股,它抱怨。事后才有了完美的感觉......

我的测试工作模式是:

 val RegexPattern = "(.+(?=\\/))(\\/)(.+(?=\\.))(.*)".r
  val RegexPattern(dir, delimeter, file, ext) = "direct/ory/filename.ext"
  println(dir + " - "+ delimeter + " - " + file + " - " + ext)

希望这有助于其他人。