[英]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})$
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));
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.