Разобрать строку в C # с помощью регулярных выражений и заменить - PullRequest
0 голосов
/ 08 ноября 2019

Я должен проанализировать строку в C # как:

Некоторый текст [имя_первой |Пользователь] какой-то другой текст. [Твой день рождения в гг / мм / дд |]

Пример:

Уважаемый [first_name |Пользователь], как дела? [Твой день рождения в гг / мм / дд |]

Итак, я проверяю скобки [] во всем тексте, убираю пробел до и после символов: [, |, ] и заполняю first_name из базы данных иесли first_name недоступен, замените его альтернативным текстом, в данном случае User.

А если в базе данных нет подарка на день рождения, то замените Your birthday is on yy/mm/dd на null.

Я знаю, что регулярное выражение предназначено для сопоставления строк, но как мне заменить строку, например: Replace("first_name", Name); в регулярном выражении?

Есть ли сторонняя библиотека для этого?

Ответы [ 2 ]

1 голос
/ 08 ноября 2019

Regex может сделать это :) Пожалуйста, попробуйте что-то вроде этого:

class Program
{
    static void Main(string[] args)
    {
        var processedText = Regex.Replace("Some text [first_name | User] some other text. [Your birthday is on yy / mm / dd | ]. " +
            "Dear [ first_name | User ], How are you?. [ Your birthday is on yy/mm/dd | ]",
            @"\[\s*(.*?)\s*\|\s*(.*?)\s*\]", new MatchEvaluator(ReplaceAction));

        Console.WriteLine(processedText);
    }

    public static bool DummyTryGetValueFromDb(string key, out string value)
    {
        Random randomizer = new Random(DateTime.UtcNow.Millisecond);

        if (randomizer.Next(100) > 50) // Successfully found in db :)
        {
            if (key == "first_name")
            {
                value = "Toto";
                return true;
            }
            else
            {
                value = "Your birthday is on your birthday date from db !";
                return true;
            }
        }
        else
        {
            value = string.Empty;
            return false;
        }
    }

    public static string ReplaceAction(Match match)
    {
        if (match.Groups.Count > 1)
        {
            var dataKeyGroup = match.Groups[1];
            if (DummyTryGetValueFromDb(dataKeyGroup.Value, out var valueFromDb))
                return valueFromDb;
            else if (match.Groups.Count > 2)
                return match.Groups[2].Value;
            else
                return "[Not found from db, no alternative value]"; // you can throw exception
        }
        else
            return "[Bad syntax]"; // you can throw exception
    }
}
0 голосов
/ 08 ноября 2019
Regex.Replace("Dear [ first_name | User ], How are you?. [ Your birthday is on yy/mm/dd | ]", "Your Pattern", firstName ?? User)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...