2017-08-07 165 views
0
val file_name="D:/folder1/folder2/filename.ext" //filename 
val reg_ex = """(.*?).(\\\\w*$)""".r //regex pattern 

file_name match { 
     case reg_ex(one , two) =>s"$two is extension" 
     case _ => println(" file_reg_ex none") 
    } 

我想从提取的文件扩展名,即“EXT”上方使用正则表达式阶,使用匹配&的情况。阶正则表达式:提取文件扩展名

我正在使用上面的正则表达式,它进入不匹配的情况。

任何指向正则表达式教程的指针都会有所帮助。

+0

你有什么试过?你卡在哪里?发布一些不起作用的代码,我们可以指出它的偏离轨道。 – jwvh

+0

@jwvh我已经更新了代码,请检查 – codehunter

回答

2

一些小的调整。

val reg_ex = """.*\.(\w+)""".r 

file_name match { 
    case reg_ex(ext) =>s"$ext is extension" 
    case _ => println("file_reg_ex none"); "" 
} 

只需要一个捕获组。忽略最后一个点之前的所有内容,\.(因为它是一个点而不是“任何字符”)并捕获剩余的点。

默认值case _应该大于println。它应该返回与匹配相同的类型。

+0

那个工作!谢谢了很多,你可以指点我的任何正则表达式教程,可能具体到scala会好得多,这将是伟大的。 – codehunter

+1

1 - 很高兴能帮到你。 2 - 在SO上正确表达感激之情,是对选票表决和/或将答案标记为“接受”。 3 - 我确定有很多优秀的正则表达式教程在线。我最近没有用过,所以我没有任何建议。 – jwvh

+1

+1来修复答案中的'case _'。 Scala正则表达式是java的正则表达式,但在http://www.scala-lang.org/api/current/scala/util/matching/Regex.html有一些例子。对于解析文件路径,你真的需要一个库,而不是正则表达式。有几个库。 –