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

本文关键字:正则表达式 过滤 字符串 屏蔽 格式化 | 更新日期: 2023-09-27 17:54:36

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

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

我想匹配变量名称的属性,理想情况下,我不想通过GetProperties循环,格式化和测试每个名称。我想做的是获得"变量"作为一个字符串,并测试。

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

这感觉应该是直接的....

谢谢!

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

   "(?<word>'w+)"

只是捕获任何字母数字并将其放入命名为"Word"的捕获组

你可能有兴趣学习向后看和向前看。例如:

"(?<=%)(?<word>'w+)(?=%)"

你可以把你的过滤器放在一个单独的变量中,让它更通用一点:

    string Boundie = "%";
    string Expression = @"(?<=" + Boundie + @")(?<word>'w+)(?=" + Boundie + @")";

给定您的regex语法是: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();
}
还是我完全误解了这个问题?

Acron,

如果你要滚动你自己的脚本解析器…除了"有点疯狂"之外,除非这是练习的重点(是吗?),然后我强烈建议你亲吻它……Keep It Simple .

那么在脚本语法中什么表示变量呢?是百分号吗?它们是固定的,对吧?所以%name%是一个变量,但#comment#不是一个变量…正确吗?"那个过滤器是任意的"这句话让我很担心。什么是"过滤器"?

如果这不是家庭作业,那么就使用现有的脚本引擎,使用现有的,定义良好的,众所周知的语法。比如Jint。

欢呼。基斯。