やりたい事
[]
で囲まれた文字列に任意のタグを付けたいです。
試したこと1
c#
1using System; 2using System.Text.RegularExpressions; 3 4namespace Test 5{ 6 class Program 7 { 8 static string MyReplace(string str) 9 { 10 var reg = new Regex("(\[.*?\])"); 11 foreach(Match m in reg.Matches(str)) 12 { 13 var itemName = m.Groups[1].Value; 14 15 str = str.Replace(itemName, $"<font color=\"red\">{itemName}</font>"); 16 } 17 18 return str; 19 } 20 21 static void Main(string[] args) 22 { 23 // テスト対象文字列 24 var strings = new[] 25 { 26 "あなたは[普通の剣]を獲得しました!", 27 "あなたは[普通の剣][普通の弓]を獲得しました!", 28 29 "あなたは[普通の剣[炎]][普通の弓]を獲得しました!", 30 "あなたは[普通の剣][普通の弓[炎]]を獲得しました!", 31 "あなたは[普通の剣[炎]][普通の弓[炎]]を獲得しました!", 32 }; 33 34 foreach (var str in strings) 35 { 36 var x = MyReplace(str); 37 Console.WriteLine(x); 38 } 39 } 40 } 41} 42
実行結果(問題点)
[炎]
の括弧閉じで</font>
がついている為最後の]
に色が付きません。
あなたは<font color="red">[普通の剣]</font>を獲得しました! あなたは<font color="red">[普通の剣]</font><font color="red">[普通の弓]</font>を獲得しました! あなたは<font color="red">[普通の剣[炎]</font>]<font color="red">[普通の弓]</font>を獲得しました! あなたは<font color="red">[普通の剣]</font><font color="red">[普通の弓[炎]</font>]を獲得しました! あなたは<font color="red">[普通の剣[炎]</font>]<font color="red">[普通の弓[炎]</font>]を獲得しました!
望む実行結果
あなたは<font color="red">[普通の剣]</font>を獲得しました! あなたは<font color="red">[普通の剣]</font><font color="red">[普通の弓]</font>を獲得しました! あなたは<font color="red">[普通の剣[炎]]</font><font color="red">[普通の弓]</font>を獲得しました! あなたは<font color="red">[普通の剣]</font><font color="red">[普通の弓[炎]]</font>を獲得しました! あなたは<font color="red">[普通の剣[炎]]</font><font color="red">[普通の弓[炎]]</font>を獲得しました!
試したこと2
正規表現を次のように変更しました。(はてなを消して最短一致をやめました。)
var reg = new Regex("(\[.*\])");
アイテム2つある場合個別に色がつかなくなってしまいました。
あなたは<font color="red">[普通の剣]</font>を獲得しました! あなたは<font color="red">[普通の剣][普通の弓]</font>を獲得しました! あなたは<font color="red">[普通の剣[炎]][普通の弓]</font>を獲得しました! あなたは<font color="red">[普通の剣][普通の弓[炎]]</font>を獲得しました! あなたは<font color="red">[普通の剣[炎]][普通の弓[炎]]</font>を獲得しました!
環境
- Visual Studio Community 2017
- C# 7.3
回答1件
あなたの回答
tips
プレビュー