2

テキスト ファイルから読み取ったブロック コメントを削除しようとしています。したがって、「/ 」と「 /」の間のすべてのテキストを削除する必要があります。リーダーは行ごとに読み取り、問題が発生した場所を読み取ります。これは私がこれまでに持っているものです:

        StringBuilder buildString = new StringBuilder();

        using (StreamReader readFile = new StreamReader(filePath))
        {
            string line;
            // reads the file line by line
            while ((line = readFile.ReadLine()) != null)
            {
                //replaces the line if it has "--" in it.
                line = Regex.Replace(line, @"--.*$", "");

                if (line.StartsWith("/*"))
                {
                    while ((line = readFile.ReadLine() ) != null)
                    {
                        //remove line untill the last line '*/'
                        if (line.StartsWith("*/"))
                        {
                            //Then Stop removing lines and go back to the main while.
                        } 
                    }
                }

                buildString.Append(line + Environment.NewLine);
            }

何か提案や助けはありますか?ありがとう

4

3 に答える 3

1

スタックデータ構造を使用すると、仕事ができます。ただし、一行ずつ読むのではなく、一文字ずつ読む必要があります。

手順:

  1. に遭遇しない限り、前処理しないでください"/"
  2. 「/」に遭遇したら、次の文字が であるかどうかを確認してください"*"
    • "*/"はいの場合、組み合わせが来るまですべてのデータをスタックにプッシュします。
  3. 出力にプッシュが"*/"来ると。

a"*/"が来ない場合、または"*/"a に一致する がない場合は"/*"、エラーをスローします。

于 2012-05-16T11:54:37.650 に答える
0

次のような正規表現を使用するのはどうですか

\ x2F\x2A。*\x2A \ x2F

https://www.google.com/search?q=q=regex+tutorial+in+c%23

\ x2Fは/の場合は16進数、\ x2Aは*の場合は16進数です。正規表現クラスは文字の16進数コードを受け入れるため、複数行の正規表現を使用する場合は、ブロックコメントを選択できます。

編集:関数の例

public string RemoveBlockComments(string InputString)
{
   string strRegex = @"\/\*.*|.*(\n\r)*\*\/";
   RegexOptions myRegexOptions = RegexOptions.Multiline;
   Regex myRegex = new Regex(strRegex, myRegexOptions);
   return myRegex.Replace(strTargetString, "");
}
于 2012-05-17T08:50:15.957 に答える