c#替换大括号内的文本,包括大括号

问题描述 投票:2回答:5

我正在尝试替换用大括号括起来的字符串。

如果我使用Regex类提供的Replace方法并且我没有指定花括号,则会找到并正确替换该字符串,但如果我确实指定了这样的大括号:{{FullName}},则文本保持不变。

   var pattern = "{{" + keyValue.Key + "}}";
   docText = new Regex(pattern, RegexOptions.IgnoreCase).Replace(docText, keyValue.Value);

以此字符串为例

Dear {{FullName}}

我想用John替换它,以便文本最终如下:

Dear John

如何表达正则表达式,以便找到并正确替换字符串?

c# regex
5个回答
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
投票

寻找"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);

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

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


0
投票

我认为你真正想做的是替换文档中的多个内容。

为此,请使用我提供的正则表达式模式,但也使用正则表达式替换匹配赋值程序委托。这样做的是,每个项目的每个匹配都可以被积极评估,并且根据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,我正在写信给我说一个很棒的答案!


上面的示例使用

  • Match Evaluator Delegate
  • 命名匹配捕获组(?<{Name here}> …)
  • 设置否定[^ ]说匹配,直到找到否定项目,在这种情况下是一个闭合的卷曲}
© www.soinside.com 2019 - 2024. All rights reserved.