C#字符串屏蔽/格式化/过滤使用或不使用正则表达式

时间:2011-05-03 08:13:05

标签: c# regex string string-formatting

希望这不是太复杂,我似乎无法找到我需要的答案。

我有一个包含变量的字符串,例如:this is a %variable% string 字符串中变量的格式是任意的,尽管在此示例中我们使用过滤器%{0}%

我想将变量名称与属性匹配,理想情况下我不想遍历GetProperties,格式化和测试每个名称。我想做的是将“变量”作为字符串获取并测试它。

我已经使用RegEx使用给定的过滤器获取字符串中的变量列表:
string regExSyntax = string.Format(syntax, @"(?<word>\w+)"); 但这会返回'%'(例如'%variable%'),正如我所说的那样,过滤器是任意的,所以我不能只做一个string.Replace。

这感觉应该是直截了当的......

谢谢!

3 个答案:

答案 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之类的东西。

干杯。基思。