【发布时间】:2019-01-30 19:49:27
【问题描述】:
我正在尝试替换一个字符串,用大括号括起来。
如果我使用 Regex 类提供的 Replace 方法并且我没有指定大括号,则可以正确找到并替换字符串,但如果我像这样指定大括号:{{FullName}},则文本为原封不动。
var pattern = "{{" + keyValue.Key + "}}";
docText = new Regex(pattern, RegexOptions.IgnoreCase).Replace(docText, keyValue.Value);
以这个字符串为例
Dear {{FullName}}
我想用John替换它,这样文本就变成了这样:
Dear John.
如何表达正则表达式,以便找到并正确替换字符串?
【问题讨论】:
-
我无法通过this code 重现您的问题。第三行之后的
docText变量将是Hello there John!。 -
我认为现在还不清楚。
keyValue是什么?请提供所有详细信息以重现问题。 -
另外,您可能需要查找RegEx.Escape 来清理您的模式字符串,以便您从字面上匹配“模式”的所有字符。你实际上没有正则表达式。例如:
{在 RegEx 语言中表示特殊的含义。 -
是的,
{{8}}不会匹配{{8}},是的,所以应该转义{s。如果不确定keyValue.Key中有哪些字符,Regex.Escape总是一个好主意。 -
关键只是问题的一半。
{{foo}}的大括号也是一个问题,必须变成\{\{foo\}\}。只需传递new Regex(Regex.Escape(pattern), ...)这会将您所谓的 pattern (实际上根本不是模式,而是要搜索的文字文本)变成实际的正则表达式 pattern .