-1

抽出されたテキストがList<String>いくつかあり、リストがこの基準を満たしているかどうかを確認したい (このパターンが何度も含まれている可能性があり、すべてがリスト内の項目である):

0      // A zero should always be here when two numbers are together
\r\n   // New line
number // any positive number
\r\n   // New line
number // Positive number, .length < = 4
\r\n   // New line

私が望むのは、最初のゼロが常に存在することを確認することです。そうでない場合は、前のリスト形式と一致するように挿入します。

text  --> Insert a zero after this text
\r\n
4
\r\n
1234
\r\n

に...

text
\r\n
0     --> the inserted zero
\r\n
4
\r\n
1234
\r\n

したがって、.Insert(index, string)ループ内で使用できることはわかっています。実際、 for を使用して、多くの醜い検証でリストをループしています

public Regex isNumber = new Regex(@"^\d+$");

// When the list is been build and a possible match is found call this method:
private void CheckIfZeroMustBeAdded(List<string> stringList)
{
    int counter = 0;

    for (int i = stringList.Count - 1; i > 1; i--)
    {
        if (stringList[i].Equals(Environment.NewLine))
        {
            // Do nothing
        }
        else if (counter == 2) 
        {
            if (!stringList[i].Equals("0"))
            {
                stringList.Insert(i, string.Format("{0}{1}", Environment.NewLine,"0"));
                break;
            }
        }
        else if (ExtractionConst.isNumber.Match(stringList[i]).Success && !stringList[i].Equals("0")
        {
            // There are two numbers together
            counter++;
        }
        else
        {
            break;
        }
    }
}


しかし..これを行う効率的な方法はありますか?

4

1 に答える 1

1

あなたにとって最善の解決策は、を使用することですRegex。これを試してください:

//Add using System.Text.RegularExpressions first
string input = ....;// It's up to you
string output = Regex.Replace(input,"([^0])(\r\n([1-9]|\\d{2,})\r\n([1-9]|\\d{2,4})\r\n)","$1\r\n0$2");
于 2013-10-04T21:38:20.847 に答える