2016-04-15 8 views
0

この質問には一致するものが見つかりませんでしたので、重複している場合は事前に謝ります。テンプレートを考える .NET Regex.Replace()を使用して式を複数回置き換える

<<FirstName>> <<FirstName>>

私は両方に一致する必要があり、単一の正規表現を使用して'<<>>'年代の間に両方の文字列を置換します。

次のコードは、私が期待していように動作していないよう:

[Test] 
public void ShouldReplaceMultiple() 
{ 
    var pattern = "<<.*FirstName.*>>"; 
    var template = "<<FirstName>> <<FirstName>>"; 
    var replaceWith = "FOO"; 

    var regex = new Regex(pattern); 

    Assert.AreEqual("FOO FOO", regex.Replace(template, replaceWith)); 
} 

次のようにテストの出力は次のとおりです。

Expected string length 7 but was 3. Strings differ at index 3. 
    Expected: "FOO FOO" 
    But was: "FOO" 
    --------------^ 

私は、なぜ両方を理解していません文字列は置き換えられませんか?

答えて

1
string pattern = @"<<(?<=<<)\s*FirstName\s*(?=>>)>>"; 
var template = "<<FirstName>> <<FirstName>>"; 
var replaceWith = "FOO"; 

var regex = new Regex(pattern); 

Assert.AreEqual("FOO FOO", regex.Replace(template, replaceWith)); 
3

あなたは<<>>の間でspacesにのみ対処したい場合は.*?

var pattern = "<<.*?FirstName.*?>>"; 
var template = "<<FirstName>> <<FirstName>>"; 
var replaceWith = "FOO"; 

var regex = new Regex(pattern); 

Console.WriteLine(regex.Replace(template, replaceWith)); 

Ideone Demo

を使用して、非貪欲作り、これで十分でしょう

<<\s*?FirstName\s*?>> 
+0

<< FirstName sdf >>はマットですあなたのパターンでうかがえます。 –

+0

@ M.S。 OPごとに: - '' <<> ''の間に両方の文字列を置き換えたい。一つの正規表現を使用する '..また、OPはパターンで '。*'を使用している – rock321987

関連する問題