简体   繁体   English

正则表达式查找最后 4 位数字和 1 个特殊字符

[英]Regex find last 4 digits and 1 special character

How do I find the last 4 digits and 1 @ using regx?如何使用 regx 找到最后 4 位数字和 1 @?

@ character will never be the last character. @ 字符永远不会是最后一个字符。

123@1234@1234 567@1 ---> returns 567@1 123@1234@1234 567@1 ---> 返回 567@1

123@1234@1234 56@12 ---> returns 56@12 123@1234@1234 56@12 ---> 返回 56@12

123@1234@1234 5@123 ---> returns 5@123 123@1234@1234 5@123 ---> 返回 5@123

123@1234@1234@ 1234 ---> returns 1234 123@1234@1234@ 1234 ---> 返回 1234

Thanks for the comments bringing up these variations感谢您提出这些变化的评论

Update:更新:

123@123 4@23@1 —> returns 4@23@1 123@123 4@23@1 —> 返回 4@23@1

12@123@1 2@1@1@1 —> returns 2@1@1@1 12@123@1 2@1@1@1 —> 返回 2@1@1@1

This regex seems working with your test cases:这个正则表达式似乎适用于您的测试用例:

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

Demo & explanation演示和解释

You can simply loop througt the string starting from the end, and count the digit.您可以简单地从末尾开始循环遍历字符串,然后计算数字。 Once you reach the number of digit wanted, substring from its index.一旦达到所需的位数, substring 从它的索引。

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);
}

Usage:用法:

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现场演示

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM