C#用正则表达式替换正则表达式

C#用正则表达式替换正则表达式,c#,regex,C#,Regex,我有一个问题,我想在一些文本中用“{de}}”替换每个“[[:de:]]”。我试过了 output = Regex.Replace(input, "[[:de:(.*)]]", "{{de|(.*)}}"); 但它并没有照搬法律。 我不知道如何正确地替换它。 希望您能帮助我。使用惰性点模式和反向引用,并转义[符号: output = Regex.Replace(input, @"\[\[:de:(.*?)]]", "{{de|$1}}"); 如果de:和]之间的文本可能包含换行符,请使用Re

我有一个问题,我想在一些文本中用“{de}}”替换每个“[[:de:]]”。我试过了

output = Regex.Replace(input, "[[:de:(.*)]]", "{{de|(.*)}}");
但它并没有照搬法律。 我不知道如何正确地替换它。
希望您能帮助我。

使用惰性点模式和反向引用,并转义
[
符号:

output = Regex.Replace(input, @"\[\[:de:(.*?)]]", "{{de|$1}}");
如果
de:
]
之间的文本可能包含换行符,请使用
RegexOptions.Singleline
修饰符


如果您将所有内容封装在组中,则可以使用MatchEvaluator

输出

{{de|Hello World}}

你真的需要正则表达式吗?我认为您只能使用字符串替换方法

output = input.Replace("[[:de:(.*)]]", "{{de|(.*)}}");

使用String.Replace。如果您不想让它将
“[[:de:(.*)]”
视为正则表达式,请不要要求它这样做。匹配计算器可以保存以用于更复杂的场景,这里的替换反向引用就足够了。贪心点还会弄乱一行中包含多个匹配项的输出。@WiktorStribiżew我同意。另外,有关.NET替换反向引用的详细信息,请参阅。您错过了模式前面的
@
。@ALOISG:当然,修复了。
(.*)
是一个正则表达式。OP希望将
[[:de:Hello World]]
替换为
{{de|Hello World}
output = input.Replace("[[:de:(.*)]]", "{{de|(.*)}}");