.NET Regular Expression用于捕获具有可选属性的占位符

时间:2013-02-22 09:59:57

标签: .net regex placeholder

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

有些样本是:

%MyVariable% - >所需的输出是Name = MyVariable,Attribute =''
%MyVariable:大写% - >所需的输出是Name = MyVariable,Attribute ='uppercase'
%MyVariable:maxlen(20)% - >期望的输出是Name = MyVariable,Attribute ='maxlen(20)'
%MyVariable:单词(1,2)% - >所需的输出是Name = MyVariable,Attribute ='words(1,2)'

可以请任何人帮我构建正确的正则表达式来完成这项任务吗?

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

谢谢

1 个答案:

答案 0 :(得分:0)

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

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

按组名检索值:名称属性

示例:

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));
}

说明:模式以占位符中的%开头和结尾。在内部,我们使用语法(?<group_name>some_pattern_here)定义两个名称组。第一组使用\w+捕获所有字母数字字符,应该至少有1个字符。第二组使用%捕获所有符号,直至.*?。团体可能存在与否,因此我们将?放在其后。而已。在视觉上它看起来像:

%           MyVariable                 :  words(1,2)     %
% (?<name>     \w+     ) (?<attribute> :     .*?     )?  %

请阅读正则表达式reference on MSDN以了解所有特殊字符。