我正在尝试使用正则表达式来识别文本文件中的特定占位符 每个占位符都以%开头和结尾 打开%之后的第一个单词是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
谢谢
答案 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以了解所有特殊字符。