繁体   English   中英

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

[英]regex pattern for tags needed

z

我需要以下帮助。

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

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

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。 我对正则表达式几乎一无所知。

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

尝试{{.+}} .+表示标签中必须至少包含一个字符。

编辑:

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

我建议您尝试以下操作:

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 )而不是整个匹配中提取第一个匹配组来更改了代码。

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

-表示任何符号

-表示懒惰(不要模仿nextpattern)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM