以下字符串不是有效的文件名。
"File name\r\n\t\t\t\t\r\n\t\t\t\t (Revised 2018-05-31 15:35:41.16).txt"
以下代码将其转换为有效的文件名。
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"
它只是删除了这些无效字符。如何将这些无效转换为_
?对于这些多个后续无效字符,我希望将它们替换为仅一个_
。所以预期的结果应该是
"File name_ (Revised 2018-05-31 15_35_41.16).txt"
答案 0 :(得分:5)
这应该有效:
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, "_")