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。我对正则表达式几乎一无所知。
答案 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)
{{.*?}}
或
{{.+?}}
。 - 表示任何符号
? - 意思是懒惰(不要做下一个模式)