Получить значок имени всего класса из fontawesome

#c#

Вопрос:

Я хотел бы получить значок имени всего класса из fontawesome в список или массив на c# из fontawesome. Я хотел бы получить значок всех вариантов, например:

 fas fa-abacus
far fa-abacus
fal fa-abacus
...
 

Я попытался извлечь его из css-файла, но он получает только сами имена значков без префиксов.

 var text = File.ReadAllText(@"fontawesomeall.css");
var allMatches = Regex.Matches(text, @"^.fa-(.*):", RegexOptions.Multiline);
 

Спасибо за помощь.
Monika

Ответ №1:

 public List<string> ListOfFontAwesomeIcons(string FilePath)
{
   List<string> response = new List<string>();
   List<string> fontAwesomePrefixes = new {  "fas", "far" /*manually add all prefixes*/ }
   var textLines = File.ReadAllLines($"{FilePath}");
   foreach(string l in textLines)
   {
       foreach(string p in fontAwesomePrefixes)
       {
          if(l.Contains(p))
            response.Add(l.Replace($"{p} "));    
       }
   }

   return response;
}

 

Комментарии:

1. К сожалению, это не работает, потому что файл all.css не содержит информации о доступном префиксе для значка.

2. @monika-115 покажите мне этот файл, я понял, что это в вашем примере

3. Вам нужно будет вручную добавить информацию о префиксе в переменную fontAwesomePrefixes. Вы должны быть в состоянии определить их, быстро просмотрев файл css или документацию FontAwesome. У них не так много префиксов.

4. Проблема в том, что шрифт некоторых значков имеет не все префиксы.

Ответ №2:

Я запустил это в C# 9, VS2019, просто на основе подачи тестовой строки, и это сработало для меня. Я дважды проверил наличие fa- в списке результатов, чтобы убедиться, что исключил все остальные результаты.

Кроме того, я только что преобразовал список строк для отображения. На самом деле вам не нужно этого делать, в зависимости от того, что вы делаете со своими результатами.

ИЗМЕНИТЬ: Код обновлен, чтобы отразить файл .css FA, доступный на их веб-сайте, а не формат строки, которую я использовал ранее.

Замените путь в первой строке тем, что отражает ваш проект. Обратите внимание, что существуют более быстрые методы, чем ReadAllText, но для этого все должно быть в порядке.

 string text = System.IO.File.ReadAllText("./wwwroot/css/all.css");

var allMatches = Regex.Matches(text, "(?<=[.]).*?(fa-)?.*?(?=[:])", RegexOptions.None);
List<string> allMatchesStrings = new();

foreach (var item in allMatches)
{
    if (item.ToString().Contains("fa-"))
        allMatchesStrings.Add(item.ToString());
}

foreach (var item in allMatchesStrings)
{
    Console.WriteLine(item);
}
 

Комментарии:

1. Хорошо, хорошо, в случае такой строки все работает. Проблема в том, что fontawesome нигде не предоставляет ничего похожего на строку, которую вы написали.

2. Вы можете просто прочитать файл css в виде строки или манипулировать/читать его по мере необходимости. Главное, что я хотел показать, — это выражение регулярного выражения и .Contains("fa-")) логика. Я обновлю свой ответ, чтобы включить часть кода для чтения файла позже, когда у меня будет больше времени.

3. Попробуйте обновить код. Должен соответствовать all.css на веб-сайте FA. Пожалуйста, проголосуйте/отметьте как правильное, если это решит вашу проблему.