假設我想問用戶他們想要某個輸出是什麼格式,輸出將包含填充字段。因此,他們提供這樣的字符串:爲用戶提供轉義字符串的最佳方法
"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}}}」,那麼代碼將會將其解釋爲用括號括起來的字段值,等等。
這是我卡住的地方。我用正則表達式嘗試,想出了這個:
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}時,三個括號被視爲字符串。
感謝您的任何幫助。
好!你是正則表達式的主人。工作喜歡魅力。即使使用{{{FieldName}}}},它也會正確返回{{FieldName}}。謝謝您的幫助! – Ernie