2016-06-25 17 views
-1

[[]]の間にいくつかのキーを持つ文字列があります。私が最初で、私が何をしていますtyring、リスト内のキー名USERとSENDERを取得したい[[]]で囲まれた文字列内のキーを見つける

string s = "<p>Hi [[USER]],<br/>How are you doing<br/>Regards,<br/>[[SENDER]]</p>"; 

var keys = new List<string>(); 
     foreach (Match match in Regex.Matches(s, @"[[(.*?)]]")) 
     { 
      keys.Add(match.Value); 
     } 

しかし、キーが空来ています。

誰でも私が間違っていることを教えてもらえますか?

また、Iは< <用い>>代わりに[]の取り組んでいるが、私は< < >>

答えて

2

[ 'あなたがエスケープする必要がありそうです:

string s = "<p>Hi [[USER]],<br/>How are you doing<br/>Regards,<br/>[[SENDER]]</p>"; 

var keys = new List<string>(); 
foreach (Match match in Regex.Matches(s, @"\[\[(.*?)]]")) 
{ 
    keys.Add(match.Value.Trim('[').Trim(']')); 
} 

、トリミングなしで[[]]を除外@"(?<=\[\[)(.*?)(?=])"

を使用するか、@ Wiktor第-stribiżewが指摘したように、あなたがすることを簡素化することができますするには:

var keys = Regex.Matches(s, @"\[\[(.*?)]]").Cast<Match>() 
              .Select(p => p.Groups[1].Value).ToList() 
+0

あなたは、彼らは特殊文字ではありません、閉じ括弧をエスケープする必要はありません。 。 –

+0

@CasimiretHippolyteそれを指摘してくれてありがとう。 – user3185569

+0

「var keys = Regex.Matches(s、@ "\ [(。*?)]]")キャスト().Select(p => p.Groups [1] .Value).ToList( ) 'が十分に出てきます。 –

0

[と]にデータをロードするときの言葉は、私は言葉を忘れてしまった(正規表現され消失する試み.. 。トークン?)トークン。エスケープしてみてください:\[\[.*\]\]

0
var keys = (from Match m in Regex.Matches(s, @"\[\[(.*?)]]") select m.Groups[1] + "").ToList(); 
関連する問題