[英]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.