.NET正则表达式以捕获具有可选属性的占位符

.NET正则表达式以捕获具有可选属性的占位符,.net,regex,placeholder,.net,Regex,Placeholder,我正在尝试使用正则表达式来识别文本文件中的特定占位符。 每个占位符以%开头和结尾。 打开%后的第一个单词是占位符名称,它可以具有可选属性(请考虑非默认格式属性) 一些样本是: %MyVariable%-->所需的输出是Name=MyVariable,Attribute='' %MyVariable:uppercase%-->所需的输出是Name=MyVariable,Attribute='uppercase' %MyVariable:maxlen(20)%-->所需输出为Name=MyVaria

我正在尝试使用正则表达式来识别文本文件中的特定占位符。
每个占位符以%开头和结尾。
打开%后的第一个单词是占位符名称,它可以具有可选属性(请考虑非默认格式属性)

一些样本是:

%MyVariable%-->所需的输出是Name=MyVariable,Attribute=''
%MyVariable:uppercase%-->所需的输出是Name=MyVariable,Attribute='uppercase'
%MyVariable:maxlen(20)%-->所需输出为Name=MyVariable,Attribute='maxlen(20)'
%MyVariable:words(1,2)%-->所需输出为Name=MyVariable,Attribute='words(1,2)'

能否请任何人帮助我建立一个正确的regexp来完成这项任务

我正在使用C#和.NET framework v4.0


谢谢

以下模式将为您捕获每个占位符:

%(?<name>\w+)(?<attribute>:.*?)?%

请阅读正则表达式以理解所有特殊字符。

^%[*]|[*:*]%$
我想这是一个起点,尽管从技术上讲,第一个类无论如何会推翻第二个类。。。这是一个非常好的参考,顺便说一句。谢谢@Westie,我会看看那个网站。谢谢,它按预期工作。你能详细解释一下吗,因为我正在努力学习regexp是如何工作的…@Genesio,我已经为你添加了一些解释。
var matches = Regex.Matches(input, @"%(?<name>\w+)(?<attribute>:.*?)?%");
foreach (Match match in matches)
{
    var name = match.Groups["name"].Value;
    var attribute = match.Groups["attribute"].Value;
    Console.WriteLine(
        string.Format("Name={0}, Attribute='{1}'", name, attribute));
}
%           MyVariable                 :  words(1,2)     %
% (?<name>     \w+     ) (?<attribute> :     .*?     )?  %