16 位数字的基本正则表达式
本文关键字:正则表达式 数字 | 更新日期: 2023-09-27 18:31:42
我目前有一个正则表达式,可以从文件中提取一个 16 位数字,例如:
正则表达式:
Regex.Match(l, @"'d{16}")
这将适用于以下数字:
1234567891234567
虽然我怎么能在正则表达式中包含数字,例如:
1234 5678 9123 4567
和
1234-5678-9123-4567
如果所有组的长度始终为 4 位:
'b'd{4}[ -]?'d{4}[ -]?'d{4}[ -]?'d{4}'b
要确保组之间的分隔符相同,请执行以下操作:
'b'd{4}(| |-)'d{4}'1'd{4}'1'd{4}'b
如果总是在一起或四人一组,那么使用单个正则表达式执行此操作的一种方法是:
Regex.Match(l, @"'d{16}|'d{4}[- ]'d{4}[- ]'d{4}[- ]'d{4}")
你可以尝试这样的事情:
^([0-9]{4}['s-]?){3}([0-9]{4})$
这应该可以解决问题。
请注意:这也允许
1234-5678 9123 4567
它对仅破折号或空格并不严格。
另一种选择是只使用您当前拥有的正则表达式,并在运行正则表达式之前将所有有问题的字符从字符串中删除:
var input = fileValue.Replace("-",string.Empty).Replace(" ",string.Empty);
Regex.Match(input, @"'d{16}");
这是一个模式,它将获取所有数字并去除破折号或空格。请注意,它还会检查以验证是否只有 16 个数字。忽略选项是为了注释模式,它不会影响匹配处理。
string value = "1234-5678-9123-4567";
string pattern = @"
^ # Beginning of line
( # Place into capture groups for 1 match
(?<Number>'d{4}) # Place into named group capture
(?:['s-]?) # Allow for a space or dash optional
){4} # Get 4 groups
(?!'d) # 17th number, do not match! abort
$ # End constraint to keep int in 16 digits
";
var result = Regex.Match(value, pattern, RegexOptions.IgnorePatternWhitespace)
.Groups["Number"].Captures
.OfType<Capture>()
.Aggregate (string.Empty, (seed, current) => seed + current);
Console.WriteLine ( result ); // 1234567891234567
// Shows False due to 17 numbers!
Console.WriteLine ( Regex.IsMatch("1234-5678-9123-45678", pattern, RegexOptions.IgnorePatternWhitespace));