0

豪齐特,

我需要以下帮助。

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

到目前为止我有这个,但它没有找到任何匹配,我在这里错过了什么?

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]}}"; thanx

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

4

4 回答 4

4

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

于 2012-08-20T10:40:24.293 回答
1

试试{{.+}}。这.+意味着必须至少有一个字符作为标签的一部分。

编辑:

要捕获包含您的标签的字符串,您可以这样做{{(.+)}},然后使用 Tokenize 或 Scanner 类标记您的匹配项?

于 2012-08-20T10:36:50.947 回答
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

“懒惰”意味着尝试在“ }}”之后继续匹配模式,然后再回溯到并且当字符不匹配时才.*?不情愿地将字符添加到捕获组- 希望这是有道理的。}}

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

于 2012-08-20T10:56:13.067 回答
0

{{.*?}}或者 {{.+?}}

. - 表示任何符号

? - 表示懒惰(不要忽略下一个模式)

于 2012-08-20T10:38:36.983 回答