2012-04-04 18 views
5

文字列内の部分文字列を置き換えることができますが、文字列を置き換えるための代替方法があるかどうかは疑問でした。 I.Eで、文字列"**"のすべての一致と一致し、最初の発生を"<strong>"に置き換え、次の発生を"</strong>"(次にそのパターンを繰り返す)に置き換えます。部分文字列の代替置換

入力はこのようなものになるだろう:"This is a sentence with **multiple** strong tags which will be **strong** upon output"

、出力が返さは、次のようになります。

using System.Text.RegularExpressions; 

class Program { 
    static void Main(string[] args) { 
     string toReplace = "This is a sentence with **multiple** strong tags which will be **strong** upon output"; 
     int index = 0; 
     string replaced = Regex.Replace(toReplace, @"\*\*", (m) => { 
      index++; 
      if (index % 2 == 1) { 
       return "<strong>"; 
      } else { 
       return "</strong>"; 
      } 
     }); 
    } 
} 
+2

ループ内の開始インデックスで 'IndexOf'を使うことができます。 – CodesInChaos

+0

@ CodeInChaos私はIndexOfを頻繁に使用していませんが、それを見ていますが、実装方法はありますか? – JakeJ

答えて

6

あなたはMatchEvaluatorデリゲートを取るRegex.Replaceのオーバーロードを使用することができますこれを行う最も簡単な方法は、**ではなく、実際に**(content)**の正規表現にすることです。それを<strong>(content)</strong>で置き換えれば完了です。

MarkdownSharpをhttps://code.google.com/p/markdownsharpでチェックしてみることもできます。これは実際に使用しているようだからです。

+0

これにスポットを当ててください。 +1。 – SkonJeet

+0

@Paoloこれをもう一度使ったところ、 'if'文を' return index%2 == 1 'に置き換えると、コードを短縮して少し良くなることが分かりました。 "": ""; ' – JakeJ

1

"This is a sentence with <strong>multiple</strong> strong tags which will be <strong>strong</strong> upon output"

+0

これは最もクリーンな方法です。+1。 –

+0

私はMarkDownSharpを見てきましたが、私は入力用の太字のみを必要としました。私はそれが明らかに彼の仕様に合っていない – JakeJ

-1

var sourceString = "This is a sentence with **multiple** strong tags which will be **strong** upon output"; 
var resultString = sourceString.Replace(" **","<strong>"); 
resultString = sourceString.Replace("** ","</strong>"); 

歓声、

+0

がより頻繁に要求されるようになると、それを使用し始めるかもしれません。 – CodesInChaos

+0

スペースが存在しない場合、これは混乱し、理由がありません。 –

+1

これは指定した入力に対して機能しますが、 '**'の開始グループが文字列の先頭にある場合、問題が発生します。 – JakeJ

-3

私はあなたはそれが非常に簡単です、パターンに一致し、それを置き換えるために正規表現を使うべきだと思うが、それを試してみてください。

+0

回答が単純すぎます。まだ提供されていないコードの例を提供してください。 – vapcguy

1

あなたはこれを解決するために、正規表現を使用することができます。

string sentence = "This is a sentence with **multiple** strong tags which will be **strong** upon output"; 

var expression = new Regex(@"(\*\*([a-z]+)\*\*)"); 

string result = expression.Replace(sentence, (m) => string.Concat("<strong>", m.Groups[2].Value, "</strong>")); 

このアプローチは、(This **word should be **strong**のような文字列を考える)に自動的に構文エラーを処理します。

関連する問題