希望这不是太复杂,我似乎无法找到我需要的答案。
我有一个包含变量的字符串,例如:this is a %variable% string
字符串中变量的格式是任意的,尽管在此示例中我们使用过滤器%{0}%
我想将变量名称与属性匹配,理想情况下我不想遍历GetProperties
,格式化和测试每个名称。我想做的是将“变量”作为字符串获取并测试它。
我已经使用RegEx使用给定的过滤器获取字符串中的变量列表:
string regExSyntax = string.Format(syntax, @"(?<word>\w+)");
但这会返回'%'(例如'%variable%'),正如我所说的那样,过滤器是任意的,所以我不能只做一个string.Replace。
这感觉应该是直截了当的......
谢谢!
答案 0 :(得分:3)
"(?<word>\w+)"
只是捕获任何alphnumeric并将其放入名为“Word”的命名捕获组
您可能有兴趣了解lookbehind和lookahead。例如:
"(?<=%)(?<word>\w+)(?=%)"
将过滤器放在一个单独的变量中可以使它更通用:
string Boundie = "%";
string Expression = @"(?<=" + Boundie + @")(?<word>\w+)(?=" + Boundie + @")";
我希望这可以在你想要的附近。
答案 1 :(得分:2)
鉴于您的正则表达式语法为:string regExSyntax = string.Format(syntax, @"(?<word>\w+)");
,我假设您将创建一个Regex
并使用它来匹配某些字符串:
Regex reExtractVars = new Regex(regExSyntax);
Match m = reExtractVars.Match(inputString);
while (m.Success)
{
// get the matched variable
string wholeVar = m.Value; // returns "%variable%"
// get just the "word"
string wordOnly = m.Groups["word"].Value; // returns "variable"
m = m.NextMatch();
}
或者我完全误解了这个问题?
答案 2 :(得分:0)
阿克罗,
如果你打算使用你自己的脚本解析器...除了“有点疯狂”之外,除非这是练习的重点(是吗?),我强烈建议你吻它。保持简单的Stoopid。
那么什么表示脚本语法中的VARIABLE?这是百分号吗?他们是固定的,是吗?所以%name%
是变量,但#comment#不是变量......正确吗? “过滤器是任意的”这句话让我很担心。什么是“过滤器”?
如果这不是家庭作业,那么只需使用现有的脚本引擎,即现有的,定义明确的,众所周知的语法。例如Jint之类的东西。
干杯。基思。