假设我想询问用户他们希望某个输出采用什么格式,并且输出将包括填写字段。所以他们提供了类似这样的字符串:
"Output text including some field {FieldName1Value} and another {FieldName2Value} and so on..."
由 {} 绑定的任何内容都应该是表中某处的列名,它们将被我正在编写的代码中的存储值替换。看起来很简单,我可以在任何匹配模式“{”+ FieldName +“}”的实例上做一个字符串。替换。但是,如果我还想为用户提供使用转义的选项,这样他们就可以像使用任何其他字符串一样使用括号。我在想他们提供“{{”或“}}”来逃避那个括号 - 对他们来说既好又容易。所以,他们可以提供类似的东西:
"Output text including some field {FieldName1Value} and another {FieldName2Value} but not this {{FieldName2Value}}"
但是现在“{{FieldName2Value}}”将被视为任何其他字符串,并被替换忽略。此外,如果他们决定将“{{{FieldName2Value}}}”之类的内容放在三方括号中,则代码会将其解释为用括号括起来的字段值等。
这就是我卡住的地方。我正在尝试使用 RegEx 并想出了这个:
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
string format = (string)values[0];
ObservableCollection<CalloutFieldAliasMap> oc = (ObservableCollection<CalloutFieldAliasMap>)values[1];
foreach (CalloutFieldMap map in oc)
format = Regex.Replace(format, @"(?<!{){" + map.FieldName + "(?<!})}", " " + map.FieldAlias + " ", RegexOptions.IgnoreCase);
return format;
}
这适用于双括号 {{ }} 的情况,但如果有三个,即 {{{ }}} 则无效。当三方括号应被视为 {FieldValue} 时,它被视为字符串。
谢谢你的帮助。