0

現在、ファイルからintを読み取るメソッドがあり、16 intに達すると、文字列(レジスタ)に対して正規表現が実行されます。int(または数値)がファイルから読み込まれる方法が問題を引き起こしていますが。現在、ファイルからすべての数字を読み取り、文字などの他の文字は無視します。したがって、以下が収集されます。

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);
      }
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 に答える