Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 需要标记的正则表达式模式_C#_Regex_Tags - Fatal编程技术网

C# 需要标记的正则表达式模式

C# 需要标记的正则表达式模式,c#,regex,tags,C#,Regex,Tags,霍兹特 我需要以下方面的帮助 我需要在字符串中查找标记。这些标记以{{开头,以}结尾,我收到的字符串中将有多个标记 到目前为止,我有这个,但它没有找到任何匹配,我错过了什么 List<string> list = new List<string>(); string pattern = "{{*}}"; Regex r = new Regex(pattern, RegexOptions.IgnoreCase); Match m = r.Match(text); wh

霍兹特

我需要以下方面的帮助

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

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

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;
List List=新列表();
字符串模式=“{{*}}”;
Regex r=新的Regex(模式,RegexOptions.IgnoreCase);
匹配m=r.Match(文本);
while(m.Success)
{
list.Add(m.Groups[0].Value);
m=m.NextMatch();
}
退货清单;
甚至尝试了
字符串模式=“{{[A-Za-z0-9]}”
塔克斯


另外,我对正则表达式几乎一无所知。

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

编辑:


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

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

编辑:

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

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

.-表示任何符号

?-表示懒惰(不使用下一种模式)

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

.-表示任何符号


?-表示懒惰(不要使用下一个模式)

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

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

我建议尝试以下操作:

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;
“lazy”是指在回溯到
*?
之前,尝试在“
}
”之后继续匹配模式,并且仅当字符不匹配时才不情愿地将字符添加到捕获组中
。-希望这是有意义的


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

我建议尝试以下方法:

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;
“lazy”是指在回溯到
*?
之前,尝试在“
}
”之后继续匹配模式,并且仅当字符不匹配时才不情愿地将字符添加到捕获组中。-希望这是有意义的


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

这是C#?-请始终将您使用的语言作为标记,因为您的表达式指定的正则表达式“风格”之间存在细微差异,本质上是:“查找
{
,然后匹配
{
(零到无限次),然后匹配
}
”这是C#?-请始终将您使用的语言作为标记,因为您的表达式指定的正则表达式“风格”之间存在细微差异,本质上是:“查找
{
,然后匹配
{
(零到无限次),然后匹配
}
”,但是我得到的列表是整个文本,而不仅仅是找到的标记:(检查m.Groups数组中是否有更多匹配项,括号中的匹配项的索引通常为1。0索引是整个匹配字符串。m.Groups列表中只有1。其中包括整个字符串。因此,我意识到,如果只有一个标记,它只返回标记,如果有更多标记,它返回所有内容,如果字符串是
{test1}和{test2}}和test3
,它返回
{test1}}和{{test2}}
,因此它不会找到第一个
}
,但是我得到的列表是整个文本,而不仅仅是找到的标记:(检查m.Groups数组中是否有更多匹配项,括号中的匹配项的索引通常为1。0索引是整个匹配字符串。m.Groups列表中只有1。其中包括整个字符串。因此,我意识到,如果只有一个标记,它只返回标记,如果有更多标记,它返回所有内容,如果字符串是
{test1}和{test2}}和test3
,它返回
{test1}}和{{test2}}
,因此它不会找到第一个
}