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.
这感觉应该是直接的....
谢谢!
"(?<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。
欢呼。基斯。