我有一个包含多个&#34;合并字段的长字符串&#34;,所有合并字段将采用以下格式:<<FieldName>>
。
该字符串将具有多个不同类型的合并字段,即<<FirstName>>
,<<LastName>>
如何遍历字符串并找到所有合并字段,以便我可以用文本替换字段?
我不会知道字符串中所有不同的Merge字段,用户可以在两个指标之间输入任何内容,即<<Anything>>
理想情况下,我希望远离任何正则表达式,但很乐意探索所有选项。
答案 0 :(得分:5)
RegularExpression在这里最有意义
string text = "foo <<FieldName>> foo foo <<FieldName>> foo";
string result = Regex.Replace(text, @"[<]{2}\w*[>]{2}", "bar", RegexOptions.None);
没有RegEx的更新 - 问题得到更新后:
Dictionary<string, string> knownFields = new Dictionary<string, string> { {"<<FirstName>>", "Jon"}, {"<<LastName>>", "Doe"}, {"<<Job>>", "Programmer"}};
string text = "Hello my name is <<FirstName>> <<LastName>> and i work as a <<Job>>";
knownFields.ToList().ForEach(x => text = text.Replace(x.Key, x.Value));
答案 1 :(得分:1)
我知道你说你想避免正则表达式,但它是适合这项工作的工具。
Dictionary<string,string> fieldToReplacement = new Dictionary<string,string> {
{"<<FirstName>>", "Frank"},
{"<<LastName>>", "Jones"},
{"<<Salutation>>", "Mr."}
};
string text = "Dear <<Salutation>> <<FirstName>> <<LastName>>, thanks for using RegExes when applicable. You're the best <<FirstName>>!!";
string newText = Regex.Replace(text, "<<.+?>>", match => {
return fieldToReplacement[match.Value];
});
Console.WriteLine(newText);
答案 2 :(得分:-3)
正如@Alex K.所写,您需要搜索开始和结束标记的索引,如下所示:
class Program {
static void Main(string[] args) {
string text = "<<FieldName>>";
const string startTag = "<<";
const string endTag = ">>";
int offset = 0;
int startIndex = text.IndexOf(startTag, offset);
if(startIndex >= 0) {
int endIndex = text.IndexOf(endTag, startIndex + startTag.Length);
if(endIndex >= 0) {
Console.WriteLine(text.Substring(startIndex + startTag.Length, endIndex - endTag.Length));
//prints "FieldName"
}
}
Console.ReadKey();
}
}