查找用[[]]括起来的字符串中的键

时间:2016-06-25 16:45:13

标签: c# regex

我有一个字符串,在[[]]之间有一些键。

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

我想首先在一个列表中获取密钥名称USER和SENDER,我正在通过以下方式进行操作:

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

然而,钥匙是空的。

谁能告诉我我做错了什么?

另外,我尝试使用&lt;&lt; &GT;&GT;而不是[[]]正在工作但是当我将数据加载到&lt;&lt;时,单词会消失&GT;&GT;

3 个答案:

答案 0 :(得分: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()

答案 1 :(得分:0)

[和]是正则表达式(我忘了单词......令牌?)令牌。尝试逃避它们:\[\[.*\]\]

答案 2 :(得分:0)

var keys = (from Match m in Regex.Matches(s, @"\[\[(.*?)]]") select m.Groups[1] + "").ToList();