Преобразовать несколько последовательных недопустимых символов в одно подчеркивание? - PullRequest
0 голосов
/ 05 июня 2018

Следующая строка не является допустимым именем файла.

"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"

1 Ответ

0 голосов
/ 05 июня 2018

Это должно работать:

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, "_")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...