C# 16位数字的基本正则表达式

C# 16位数字的基本正则表达式,c#,.net,regex,windows,C#,.net,Regex,Windows,我目前有一个从文件中提取16位数字的正则表达式,例如: 正则表达式: Regex.Match(l, @"\d{16}") 这将适用于以下数字: 123456781234567 尽管我如何在正则表达式中也包含数字,例如: 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}\

我目前有一个从文件中提取16位数字的正则表达式,例如:

正则表达式:

Regex.Match(l, @"\d{16}")
这将适用于以下数字:

123456781234567

尽管我如何在正则表达式中也包含数字,例如:

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

如果始终都是一组或四组,那么使用单个正则表达式执行此操作的一种方法如下:

^([0-9]{4}[\s-]?){3}([0-9]{4})$

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个数字。ignore选项用于注释模式,它不会影响匹配处理

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));
string value=“1234-5678-9123-4567”;
字符串模式=@“
^#行首
(#进入捕获组进行1场比赛
(?\d{4})#放入命名组捕获
(?:[\s-]?)#允许空格或破折号可选
){4} #分成4组
(?!\d)#第17号,不匹配!中止
$#End约束将整型保留为16位
";
var result=Regex.Match(值、模式、RegexOptions.IgnorePatternWhitespace)
.Groups[“Number”]。捕获
第()类
.Aggregate(string.Empty,(种子,当前)=>种子+当前);
Console.WriteLine(结果);//1234567891234567
//由于17个数字显示为假!
Console.WriteLine(Regex.IsMatch(“1234-5678-9123-45678”,pattern,RegexOptions.IgnorePatternWhitespace));

所有的组都是由4位数字组成的吗?总是四位一组,没有其他的吗?@Yorye Nathan没有其他的组\b\d{4}([-]?)\d{4}\1\d{4}\1\d{4}\b可读性更好吗?空绳子后面的管子伤了我的大脑@LexyStardust:这只是品味的问题42同意,正则表达式是了解灵魂的窗口。或者别的什么!没有Delmiter时不匹配,即1234567890123456True…但OP需要给我们一个例子,证明需要在一个文件中工作…我们不应该阅读他们的想法来找出大量可能的置换。