2

C# の PHP preg_replace とは何ですか?

他の文字列配列に置き換えたい文字列配列があります。これは PHP での例です。.Replace("old","new") を使用せずに C# でそのようなことを行うにはどうすればよいですか。

$patterns[0] = '/=C0/';
$patterns[1] = '/=E9/';
$patterns[2] = '/=C9/';


$replacements[0] = 'à';
$replacements[1] = 'é';
$replacements[2] = 'é';
return preg_replace($patterns, $replacements, $text);
4

5 に答える 5

8

実際の男性は正規表現を使用しますが、必要に応じてそれをStringに追加する拡張メソッドを次に示します。

public static class ExtensionMethods
{
    public static String PregReplace(this String input, string[] pattern, string[] replacements)
    {
        if (replacements.Length != pattern.Length)
            throw new ArgumentException("Replacement and Pattern Arrays must be balanced");

        for (var i = 0; i < pattern.Length; i++)
        {
            input = Regex.Replace(input, pattern[i], replacements[i]);                
        }

        return input;
    }
}

次のように使用します。

 class Program
    {
        static void Main(string[] args)
        {
            String[] pattern = new String[4];
            String[] replacement = new String[4];

            pattern[0] = "Quick";
            pattern[1] = "Fox";
            pattern[2] = "Jumped";
            pattern[3] = "Lazy";

            replacement[0] = "Slow";            
            replacement[1] = "Turtle";
            replacement[2] = "Crawled";
            replacement[3] = "Dead";

            String DemoText = "The Quick Brown Fox Jumped Over the Lazy Dog";

            Console.WriteLine(DemoText.PregReplace(pattern, replacement));
        }        
    }
于 2008-10-03T13:44:22.750 に答える
3
public static class StringManipulation
{
    public static string PregReplace(string input, string[] pattern, string[] replacements)
    {
        if (replacements.Length != pattern.Length)
            throw new ArgumentException("Replacement and Pattern Arrays must be balanced");

        for (int i = 0; i < pattern.Length; i++)
        {
            input = Regex.Replace(input, pattern[i], replacements[i]);                
        }

        return input;
    }
}

これが私が使用するものです。Jonathan Hollandの一部のコードですが、C#3.5ではなくC#2.0にあります:)

すべてのThx。

于 2008-10-03T15:00:10.773 に答える
3

.Select()(.NET 3.5およびC#3)を使用すると、コレクションのメンバーに関数を簡単に適用できます。

stringsList.Select( s => replacementsList.Select( r => s.Replace(s,r) ) );

正規表現のサポートは必要ありません。配列を反復処理する簡単な方法が必要です。

于 2008-10-03T13:44:23.953 に答える
2

あなたが探しているのはSystem.Text.RegularExpressions;

using System.Text.RegularExpressions;

Regex r = new Regex("=C0");
string output = r.Replace(text);

PHP の配列の動作を取得するには、`Regex の複数のインスタンスが必要です

ただし、あなたの例では、 .Replace(old, new) の方がはるかに優れています。ステートマシンをコンパイルするよりもはるかに高速です。

于 2008-10-03T13:36:40.457 に答える
0

編集:うーん、この質問は2.0に関するものだと気づきましたが、3.5にアクセスできる場合に備えて、そのままにしておきます。

Linqのことについてのもう1つの見方。今はChar[]の代わりにList<Char>を使用しましたが、それは少し見栄えを良くするためです。配列にはIndexOfメソッドはありませんが、Listには1つあります。なぜこれが必要だったのですか?私が推測していることから、置換リストと置換されるリストの間に直接的な相関関係はありません。ただのインデックス。

したがって、それを念頭に置いて、Char[]を使用してこれを行うことができます。ただし、IndexOfメソッドが表示されたら、その前に.ToList()を追加する必要があります。

このように:someArray.ToList()。IndexOf

  文字列テキスト;
  List <Char> PatternsToReplace;
  List <Char> patternToUse;

  patternToReplace = new List <Char>();
  patternToReplace.Add('a');
  patternToReplace.Add('c');
  patternToUse = new List <Char>();
  patternToUse.Add('X');
  patternToUse.Add('Z');

  text="これはものを置き換えるものです";

  var allAsAndCs = text.ToCharArray()
                 。選択する
                 ((
                   currentItem => patternToReplace.Contains(currentItem)
                     ?patternToUse [patternsToReplace.IndexOf(currentItem)]
                     :currentItem
                 )。
                 .ToArray();

  text = new String(allAsAndCs);

これは、テキストを文字配列に変換し、それぞれを選択するだけです。現在の文字が置換リストにない場合は、文字をそのまま返送してください。置換リストにある場合は、置換文字リストと同じ索引にある文字を返します。最後に、文字配列から文字列を作成します。

  システムを使用する;
  System.Collections.Genericを使用します。
  System.Linqを使用します。
于 2008-10-03T14:24:06.867 に答える