2017-04-14 17 views
1

問題がありますが、「{[de:< text>]]」を「{{de | < text>}}」と置き換える必要があります。試しましたC#RegexをRegexに置き換えます。

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

ただし、<テキストをコピーしません。 これを正しく置き換える方法は他にありません。 あなたが私を助けてくれることを願っています。 de:]]間のテキストは改行を含めることができる場合RegexOptions.Singleline修飾子を使用し、

output = Regex.Replace(input, @"\[\[:de:(.*?)]]", "{{de|$1}}"); 

+0

String.Replaceを使用してください。 [[:de:(。*)]] ''を正規表現として扱わないようにしたい場合は、それを求めないでください。 –

答えて

2

は怠惰なドットパターンと後方参照を使用して[記号をエスケープします。

regex demoを参照してください。

enter image description here

+0

また、.NET置換バックリファレンスの詳細については、[正規表現での置換](https://msdn.microsoft.com/en-us/library/ew2t5e0(v = vs.110).aspx)を参照してください。 –

+0

パターンの前に '@'がありません。 – aloisdg

+0

@aloisdg:確かに、修正されました。 –

0

あなたはグループ内のすべてのものをカプセル化する場合は、MatchEvaluatorの恩恵を受けることができます。 Try it online

public static void Main() 
{ 
    var input = "[[:de:Hello World]]"; 
    var pattern = @"(\[\[:de:)(.+)(\]\])"; 
    var output = Regex.Replace(input, pattern, m => "{{de|" + m.Groups[2].Value + "}}"); 
    Console.WriteLine(output); 
} 

出力

{{de|Hello World}} 
+2

より複雑なシナリオ用にマッチエバリュエーターを保存できますが、ここでは置換バックリファレンスで十分です。欲張りな点は、一行にいくつかの一致を含む出力を混乱させるでしょう。 –

+0

@WiktorStribiżew私は同意します。 – aloisdg

0

は、あなたが本当に正規表現が必要ですか?私はあなたが文字列置換メソッドを使用することができると思います。

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

'(。*)'は正規表現です。 OPは '[[:de:Hello World]]'を '{{de | Hello World}} 'に置き換えたいと考えています。 – aloisdg

関連する問題