以下字符串不是有效的文件名.
"File name\r\n\t\t\t\t\r\n\t\t\t\t (Revised 2018-05-31 15:35:41.16).txt"
Run Code Online (Sandbox Code Playgroud)
以下代码将其转换为有效的文件名.
let fn = """File name
(Revised 2018-05-31 15:35:41.16).txt""";;
let invalid = System.IO.Path.GetInvalidFileNameChars();;
String.Join("",
fn |> Seq.filter(fun x ->
not (Array.exists (fun y -> y = x) invalid)
)
)
// "File name (Revised 2018-05-31 153541.16).txt"
Run Code Online (Sandbox Code Playgroud)
它只是删除这些无效字符.如何将这些无效转换为_?对于这些多个后续的无效字符,我希望它们只被替换为一个_.所以预期的结果应该是
"File name_ (Revised 2018-05-31 15_35_41.16).txt"
Run Code Online (Sandbox Code Playgroud)
这应该工作:
open System.Text.RegularExpressions
let normalizeFileName name =
let invalidPattern =
System.IO.Path.GetInvalidFileNameChars()
|> Seq.map (string >> Regex.Escape)
|> String.concat ""
|> sprintf "[%s]+"
Regex.Replace(name, invalidPattern, "_")
Run Code Online (Sandbox Code Playgroud)