2017-08-07 99 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有一些例子。對於解析文件路徑,你真的需要一個庫,而不是正則表達式。有幾個庫。 –