using System.Collections.Generic; using System.Linq; using System.Text.RegularExpressions; namespace Pf2e.Scrapper.Importers.Implementations.Aonprd.Helpers; /// /// Класс-помощник, для обработки строкового ввода с Архивов Нефиса. /// Реализует шаблон Singleton. /// public partial class StringHelper { /// /// Конструктор класса /// public StringHelper() { } /// /// Разбиение строки по нестабильным строковым разделителям (например, ", ", " or " и т.д.). /// /// Исходная строка. /// Коллекция строк. public List RowSplit(string value) { return value .Replace(", or", ",") .Replace(" or ", ", ") .Replace(";", ",") .Split(", ") .Where(s => !string.IsNullOrWhiteSpace(s)) .ToList(); } /// /// Разбор списка ссылок в исходной строке. /// /// Исходная строка. /// Структура, содеражащая информацию разбиении строки по ссылкам. public MarkdownLinkSplit ParseMarkdownLinks(string input) { MarkdownLinkSplit result = new(); MatchCollection matches = LinkRegex().Matches(input); foreach (Match match in matches) { result.Links.Add( new() { Prefix = match.Groups[1].Value.Trim(), Text = match.Groups[2].Value.Trim(), Url = match.Groups[3].Value.Trim(), } ); } result.Suffix = LinkRegex().Replace(input, ""); return result; } /// /// Извлечение суффикса из описания источника. /// /// Исходная строка. /// Суффикс. public string ResolveSourceSuffix(string input) { Match match = SourceSuffixRegex().Match(input); return match.Captures.Count > 0 ? match.Groups[1].Value : ""; } /// /// Регулярное выражение для извлечения источника из строки с Markdown-ссылкой. /// /// Регулярное выражение. [GeneratedRegex(@"^\[.*?\]\(.*?\)\s+(.*)$")] public static partial Regex SourceSuffixRegex(); /// /// Регулярное выражение для выявления Markdown-ссылок в строке. /// /// Регулярное выражение. [GeneratedRegex(@"(.*?)\[(.*?)\]\((.*?)\)")] public static partial Regex LinkRegex(); } /// /// Класс структуры, содеражащая информацию разбиении строки по ссылкам. /// public class MarkdownLinkSplit { /// /// Список содержащихся ссылок. /// public List Links { get; } = []; /// /// Завершающая часть ссылки. /// public string Suffix { get; set; } = ""; } /// /// Информация о ссылке в строке. /// public class MarkdownLink { /// /// Данные, содержащиеся до ссылки. /// public string Prefix { get; init; } = ""; /// /// Текст ссылки. /// public string Text { get; init; } = ""; /// /// URL ссылки. /// public string Url { get; init; } = ""; }