带或不带正则表达式的C#字符串屏蔽/格式化/过滤
希望这不是太复杂,我只是找不到我需要的答案 我有一个包含变量的字符串,例如:带或不带正则表达式的C#字符串屏蔽/格式化/过滤,c#,regex,string,string-formatting,C#,Regex,String,String Formatting,希望这不是太复杂,我只是找不到我需要的答案 我有一个包含变量的字符串,例如:这是一个%variable%string 字符串中变量的格式是任意的,尽管在本例中我们使用的是过滤器%{0}% 我希望将变量名与属性相匹配,理想情况下,我不希望遍历GetProperties,格式化和测试每个名称。我想做的是获取“variable”作为字符串并进行测试 我已经使用RegEx来获取字符串中的变量列表,使用给定的过滤器: string regExSyntax=string.Format(语法,@“(?\w+)
这是一个%variable%string
字符串中变量的格式是任意的,尽管在本例中我们使用的是过滤器%{0}%
我希望将变量名与属性相匹配,理想情况下,我不希望遍历GetProperties
,格式化和测试每个名称。我想做的是获取“variable”作为字符串并进行测试
我已经使用RegEx来获取字符串中的变量列表,使用给定的过滤器:
string regExSyntax=string.Format(语法,@“(?\w+))代码>
但这会返回带有“%”(例如“%variable%”)的筛选器,正如我所说的,该筛选器是任意的,所以我不能只执行string.Replace
这感觉应该是直截了当的
谢谢 “(?\w+”
"(?<word>\w+)"
只是捕获任何数字并将其放入名为“Word”的命名捕获组中
您可能对学习“向后看”和“向前看”感兴趣。例如:
"(?<=%)(?<word>\w+)(?=%)"
(?)(?\w+)
只是捕获任何数字并将其放入名为“Word”的命名捕获组中
您可能对学习“向后看”和“向前看”感兴趣。例如:
"(?<=%)(?<word>\w+)(?=%)"
(?Acron
如果您打算使用自己的脚本解析器……除了“有点疯狂”,除非这是练习的重点(是吗?),否则我强烈建议您亲吻它……保持简单
那么,在脚本语法中,什么表示变量?是百分号吗?它们是固定的,是吗?所以%name%
是一个变量,但是#comment#不是一个变量…对吗?短语“该过滤器是任意的”让我担心。“过滤器”是什么
如果这不是家庭作业,那么就使用现有的脚本引擎,使用现有的、定义良好的、众所周知的语法
干杯,基思。Acron
如果您打算使用自己的脚本解析器……除了“有点疯狂”,除非这是练习的重点(是吗?),否则我强烈建议您亲吻它……保持简单
那么,在脚本语法中,什么表示变量?是百分号吗?它们是固定的,是吗?所以%name%
是一个变量,但是#comment#不是一个变量…对吗?短语“该过滤器是任意的”让我担心。“过滤器”是什么
如果这不是家庭作业,那么就使用现有的脚本引擎,使用现有的、定义良好的、众所周知的语法
Cheers.Keith.鉴于您的正则表达式语法是:string regExSyntax=string.Format(语法,@“(?\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();
}
还是我完全误解了这个问题?鉴于您的正则表达式语法是:string regExSyntax=string.Format(syntax,@“(?\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();
}
还是我完全误解了这个问题?这就是我要去的地方…;-)完美:)我想这表明我对正则表达式缺乏经验。谢谢。如果您有另一个边界是一个特殊的正则表达式字符(例如$),您必须在构造表达式之前对其进行转义:string Boundie=Regex.escape($);那就是我要去的地方…;-)完美:)我想这表明我对正则表达式缺乏经验。谢谢。如果您有另一个边界是一个特殊的正则表达式字符(例如$),您必须在构造表达式之前对其进行转义:string Boundie=Regex.escape($);不,这不是家庭作业,但用法是如此,如此原始,完全没有必要使用成熟的解析器。但你说得很对,我可以强制执行语法,我只是希望尽可能保持它的开放性。了解我的行业,我可能会得到以下反馈:“%太难看了。我们可以用笑脸代替吗?:)变量(:”所以你告诉美发师“Chopper博士禁止一大杯……这不是家庭作业不,但用法是如此,如此原始,完全没有必要使用成熟的解析器。但你说得很对,我可以强制执行语法,我只是希望尽可能保持它的开放性。了解我的行业,我很可能会从以下方面得到反馈:%太难看了。我们可以用笑脸代替吗?:)变量(:“所以你告诉理发师”Chopper医生禁止一大杯…该死的,我知道这很容易。这绝对是我需要的答案,尽管Guidhouse的答案也完全有效。我不知道你可以访问这样的团体。谢谢。该死的,我知道这很容易。这绝对是我需要的答案,尽管Guidhouse的答案也完全有效。我我不知道你可以访问这样的群组。谢谢。