我目前有一个从文件中读取整数的方法,一旦达到16个整数,就会对字符串(寄存器)运行正则表达式。虽然从文件中读入整数(或数字)的方式导致了我的问题。它目前从文件中读取所有数字,并忽略任何其他字符,如字母。因此,将收集以下内容:
example.txt中:
h568fj34fj390fjkkkkf385837692g1234567891011121314fh
输出错误:
5683439038583769
正确输出:
1234567891011121
但是我只想收集一串连续的数字(如果有其他字符,例如数字之间的字母,则不会被计算),这个方法对于一系列数字(总共16个)没有其他字符喜欢中间的字母。
我目前的逻辑如下:
var register = new StringBuilder();
using(var stream = File.Open(readme.txt, FileMode.Open))
{
bool execEnd = false;
bool fileEnded = false;
int buffer;
while(execEnd = true)
{
while(register.Length < 16 && !fileEnded)
{
buffer = stream.ReadByte();
if(buffer == -1)
{
fileEnded = true;
break;
}
var myChar = (char)buffer;
if(Char.IsNumber(myChar))
register.Append(myChar);
}
答案 0 :(得分:4)
这应该是您所需的正则表达式:\d{16}
所以你可以使用LINQ查找所有匹配项:
var allMatches =
System.IO.File.ReadLines(path)
.Select(l => System.Text.RegularExpressions.Regex.Match(l, @"\d{16}"))
.Where(m => m.Success)
.ToList();
foreach (var match in allMatches)
{
String number = match.Value;
}
答案 1 :(得分:1)
string input = "h568fj34fj390fjkkkkf385837692g1234567891011121314fh";
string num = System.Text.RegularExpressions.Regex.Match(input, @"\d{16}").Value;