0

我目前有一种方法可以从文件中读取整数,并在达到 16 个整数时针对字符串(寄存器)运行正则表达式。尽管从文件中读取整数(或数字)的方式给我带来了问题。它目前从文件中读取所有数字,并忽略任何其他字符,例如字母。因此将收集以下内容:

示例.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);
      }
4

2 回答 2

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;
}
于 2012-04-20T11:20:31.673 回答
1
string input = "h568fj34fj390fjkkkkf385837692g1234567891011121314fh";
string num = System.Text.RegularExpressions.Regex.Match(input, @"\d{16}").Value;
于 2012-04-20T11:16:48.630 回答