using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Text.RegularExpressions; namespace Emby.Naming.Video { /// <summary> /// <see href="http://kodi.wiki/view/Advancedsettings.xml#video" />. /// </summary> public static class CleanStringParser { /// <summary> /// Attempts to extract clean name with regular expressions. /// </summary> /// <param name="name">Name of file.</param> /// <param name="expressions">List of regex to parse name and year from.</param> /// <param name="newName">Parsing result string.</param> /// <returns>True if parsing was successful.</returns> public static bool TryClean([NotNullWhen(true)] string? name, IReadOnlyList<Regex> expressions, out string newName) { if (string.IsNullOrEmpty(name)) { newName = string.Empty; return false; } // Iteratively apply the regexps to clean the string. bool cleaned = false; for (int i = 0; i < expressions.Count; i++) { if (TryClean(name, expressions[i], out newName)) { cleaned = true; name = newName; } } newName = cleaned ? name : string.Empty; return cleaned; } private static bool TryClean(string name, Regex expression, out string newName) { var match = expression.Match(name); if (match.Success && match.Groups.TryGetValue("cleaned", out var cleaned)) { newName = cleaned.Value; return true; } newName = string.Empty; return false; } } }