需要标签的正则表达式模式

时间:2012-08-20 10:34:51

标签: c# regex tags

Howzit,

我需要帮助以下。

我需要在字符串中找到标签。这些标记以{{开头,以}}结尾,我收到的字符串中会有多个标记。

到目前为止,我有这个,但没有找到任何匹配,我在这里缺少什么?

List<string> list = new List<string>();

string pattern = "{{*}}";

Regex r = new Regex(pattern, RegexOptions.IgnoreCase);
Match m = r.Match(text);

while (m.Success)
{
    list.Add(m.Groups[0].Value);

    m = m.NextMatch();
}


return list;

甚至试过string pattern = "{{[A-Za-z0-9]}}"; 感谢名单

PS。我对正则表达式几乎一无所知。

4 个答案:

答案 0 :(得分:4)

您不仅要使用{{。+?}}作为正则表达式,还需要传递RegexOptions.SingleLine。这将把你的整个字符串视为单行和。将匹配\ n(通常不会这样做)。

答案 1 :(得分:1)

试试{{.+}}.+表示必须至少有一个字符作为标记的一部分。

编辑:

要捕获包含标记的字符串,您可以执行{{(.+)}},然后使用Tokenize或Scanner类对您的匹配进行标记?

答案 2 :(得分:1)

我建议尝试以下内容:

List<string> list = new List<string>();

string pattern = "{{(.*?)}}";

Regex r = new Regex(pattern, RegexOptions.IgnoreCase);
Match m = r.Match(text);

while (m.Success)
{
    list.Add(m.Groups[1].Value);

    m = m.NextMatch();
}

return list;

正则表达式指定:

{{       # match {{ literally
(        # begin capturing into group #1
  .*?    # match any characters, from zero to infinite, but be lazy*
)        # end capturing group
}}       # match }} literally

“lazy”表示在回溯到}}之前尝试继续匹配模式“.*?”并且不情愿地将字符添加到捕获组如果字符与}}不匹配 - 希望这是有意义的。

我通过修改正则表达式并从正则表达式匹配对象(m.Groups[1].value)中提取第一个匹配组而不是整个匹配来更改代码。

答案 3 :(得分:0)

{{.*?}}{{.+?}}

。 - 表示任何符号

? - 意思是懒惰(不要做下一个模式)