2017-04-10 74 views
-1

我需要刪除匹配的模式,其文件目錄下的所有目錄中的文件的某些文件:如何使用正則表達式來刪除SWIFT 3

myproject-(任何).sqlite-(任何)

現在,我做了,一個接一個:

let oldSqlitePath : NSString = documentsDirectory.appendingPathComponent("myproject-\(lastAppVersion!).sqlite") as NSString 
let oldSqliteWalPath : NSString = documentsDirectory.appendingPathComponent("myproject-\(lastAppVersion!).sqlite-wal") as NSString 
let oldSqliteShmPath : NSString = documentsDirectory.appendingPathComponent("myproject-\(lastAppVersion!).sqlite-shm") as NSString 

do { 
    // delete the old SQLite file 
    try fileManager.removeItem(atPath: oldSqlitePath as String) 
} catch _ { 
} 
do { 
    try fileManager.removeItem(atPath: oldSqliteWalPath as String) 
} catch _ { 
} 
do { 
    try fileManager.removeItem(atPath: oldSqliteShmPath as String) 
} catch _ { 
} 

我想使用正則表達式。

+0

什麼是您的具體問題? – JeremyP

+0

我沒有找到正確的方式來定義字符串myproject-(任何).sqlite-(任何)使用正則表達式。 – cmii

+0

'myproject - [^。] * \。sqlite - 。*'並不完美,但應該有所斬斷。 – JeremyP

回答

1

我不認爲正則表達式在這裏是有意義的,如果你總是隻有4個項目刪除。我使用這樣的東西。

extension URL { 

    public var sqliteFileURLs: [URL] { 

     let wal: String = "\(path)-wal" 
     let journal: String = "\(path)-journal" 
     let shm: String = "\(path)-shm" 

     let filesNames: [String] = [path, wal, shm, journal] 

     return filesNames 
      .filter { FileManager.default.fileExists(atPath: $0) } 
      .map { (path: String) -> URL in URL(fileURLWithPath: path) } 
    } 
} 

然後你就可以做path.sqliteFileURLs.map { FileManager.default.removeItem(at: $0 }

在你真的想使用正則表達式的情況下,這是它:myproject\-.+?\.sqlite\-.+

+0

謝謝,但我僅舉了一個例子。我有超過3個項目:) – cmii

+0

迴應一個正則表達式也使用 – Alistra