.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> : .*? )? %