我正在尝试替换用大括号括起来的字符串。
如果我使用Regex类提供的Replace方法并且未指定大括号,则会找到并正确替换字符串,但是如果我确实指定大括号,例如:{{FullName}}
,文字保持不变。
var pattern = "{{" + keyValue.Key + "}}";
docText = new Regex(pattern, RegexOptions.IgnoreCase).Replace(docText, keyValue.Value);
以该字符串为例
Dear {{FullName}}
我想将其替换为John
,以使文本最终如下所示:
Dear John
。
如何表达正则表达式,以便找到字符串并正确替换?
答案 0 :(得分:2)
如果键只是一个字符串,则不需要正则表达式。只需将“ {{FullName}}”替换为“ John”即可。例如:
string template = "Dear {{FullName}}";
string result = template.Replace("{{" + keyValue.Key + "}}", keyValue.Value);
编辑:解决有关此功能不起作用的问题...
以下是一个完整的示例。您可以在https://dotnetfiddle.net/wnIkvf
上运行它using System;
using System.Text.RegularExpressions;
using System.Collections.Generic;
public class Program
{
public static void Main()
{
var keyValue = new KeyValuePair<string,string>("FullName", "John");
string docText = "Dear {{FullName}}";
string result = docText.Replace("{{" + keyValue.Key + "}}", keyValue.Value);
Console.WriteLine(result);
}
}
答案 1 :(得分:1)
要从"Dear {{FullName}}"
到"Dear John"
吗?
不是正则表达式解决方案...但是有时候这是我更喜欢这样做的方式。
string s = "Dear {{FullName}}";
// use regex to replace FullName like you mentioned before, then...
s.Replace("{",string.empty);
s.Replace("}",string.empty);
答案 2 :(得分:1)
var keyValue = new KeyValuePair<string,string>("FullName", "John");
var pattern = "{{" + keyValue.Key + "}}";
Console.WriteLine(new Regex(Regex.Escape(pattern), RegexOptions.IgnoreCase).Replace("Dear {{FullName}}", keyValue.Value));
输出:
Dear John
答案 3 :(得分:0)
如果您实际上要使用正则表达式,请使用Regex.Escape转义文字文本以将其转换为正则表达式模式。
var keyValue = new KeyValuePair<string,string>("FullName", "John");
string docText = "Dear {{FullName}}";
var pattern = "{{" + keyValue.Key + "}}";
docText = new Regex(Regex.Escape(pattern), RegexOptions.IgnoreCase).Replace(docText, keyValue.Value);
docText将为Dear John
答案 4 :(得分:0)
我相信您真正想做的是替换文档中的多个内容。
为此,请使用我提供的regex模式,但也请使用regex替换匹配评估程序委托。这样做的目的是可以为每个项目 active 评估每个匹配项,并根据C#逻辑替换适当的项目。
下面是设置两个可能的关键字的示例。
string text = "Dear {{FullName}}, I {{UserName}} am writing to say what a great answer!";
string pattern = @"\{\{(?<Keyword>[^}]+)\}\}";
var replacements
= new Dictionary<string, string>() { { "FullName", "OmegaMan" }, { "UserName", "eddy" } };
Regex.Replace(text, pattern, mt =>
{
return replacements.ContainsKey(mt.Groups["Keyword"].Value)
? replacements[mt.Groups["Keyword"].Value]
: "???";
}
);
结果
亲爱的OmegaMan,我正在写涡流,说这是一个很好的答案!
前面的示例使用
(?<{Name here}> …)
[^ ]
,表示匹配,直到找到否定项为止,在这种情况下为闭合卷曲}
。