トップページに戻る    次のC#のサンプルへ    前のC#のサンプルへ

11-5 「/*」と「*/」で挟まれた部分を取り除く

問題

与えられた文字列から「/*」と「*/」で挟まれた部分を取り除くコードを書いてください。
なお、「/*」と入力末尾で挟まれた部分も取り除いてください。
つまり、入力が「AAA/*BBB」なら出力は「AAA」です。
また、コメントは入れ子になりません。

入力が「AAA/*BBB/*CCC*/DDD*/EEE」のとき、
ひとつめの「*/」でコメントが終わるので出力は「AAADDD*/EEE」になります。
「//」や「**」が混ざる場合の挙動は失敗しやすいので要注意です。

Pythonでの実行例は下のようになります:

>>> remove_comment('AAA')
'AAA'
>>> remove_comment('AAA/*BBB*/')
'AAA'
>>> remove_comment('AAA/*BBB')
'AAA'
>>> remove_comment('AAA/*BBB*/CCC')
'AAACCC'
>>> remove_comment('AAA/*BBB/*CCC*/DDD*/EEE')
'AAADDD*/EEE'
>>> remove_comment('AAA/a//*BB*B**/CCC')
'AAA/a/CCC'


ソース

using System;
using System.Text.RegularExpressions;

class Program
{
    static void Main()
    {
        var inputValues = new string[] { "AAA",
                                         "AAA/*BBB*/",
                                         "AAA/*BBB",
                                         "AAA/*BBB*/CCC",
                                         "AAA/*BBB/*CCC*/DDD*/EEE",
                                         "AAA/a//*BB*B**/CCC"};

        foreach (var each in inputValues) {
            Console.WriteLine("入力文字={0}", each);
            Console.WriteLine("変換文字={0}", Regex.Replace(each, @"/\*.*?(\*/|$)", ""));
            Console.WriteLine();
        }
    }
}


実行結果

入力文字=AAA
変換文字=AAA

入力文字=AAA/*BBB*/
変換文字=AAA

入力文字=AAA/*BBB
変換文字=AAA

入力文字=AAA/*BBB*/CCC
変換文字=AAACCC

入力文字=AAA/*BBB/*CCC*/DDD*/EEE
変換文字=AAADDD*/EEE

入力文字=AAA/a//*BB*B**/CCC
変換文字=AAA/a/CCC


解説

正規表現を使ってます。
MSDN --- Regexクラス