C# 16位数字的基本正则表达式
我目前有一个从文件中提取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}\
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需要给我们一个例子,证明需要在一个文件中工作…我们不应该阅读他们的想法来找出大量可能的置换。