Regex находит последние 4 цифры и 1 специальный символ - PullRequest
0 голосов
/ 27 апреля 2020

Как найти последние 4 цифры и 1 @ с помощью regx?

@ символ никогда не будет последним символом.

123@1234@1234567@1 ---> возвращает 567@1

123@1234@123456@12 ---> возвращает 56@12

123@1234@12345@123 ---> возвращает 5@123

123@1234@1234@ 1234 ---> возвращает 1234

Спасибо за комментарии, приводящие эти варианты

Обновление:

123@1234@23@1 -> возврат 4@23@1

12@123@12@1@1@1 -> возврат 2@1@1@1

Ответы [ 2 ]

2 голосов
/ 27 апреля 2020

Это регулярное выражение работает с вашими тестами:

(\d{4}|(?:\d@*){4})$

Демонстрация и объяснение

0 голосов
/ 27 апреля 2020

Вы можете просто l oop через строку, начиная с конца, и сосчитать ди git. Как только вы достигнете нужного числа di git, подстрока из его индекса.

private static string LastNDigit(string input, int nbDigit)
{
    var digitCount = 0;
    var sIndex = 0;           

    for (int i = input.Length - 1; i >= 0; i--)
    {
        if (char.IsDigit(input[i])) digitCount++;
        if (digitCount == nbDigit) {
            sIndex = i;
            break;
        }
    }

    return input.Substring(sIndex);
}

Использование:

var inputs = new[]{
        "123@1234@1234567@1",
        "123@1234@123456@12",
        "123@1234@12345@123",
        "123@1234@1234@1234"
};

foreach (var input in inputs)
{
    Console.WriteLine(input + " => " + LastNDigit(input, 4));
}

live Demo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...