C#preg_replace?
-
03-07-2019 - |
質問
C#のPHP preg_replaceとは何ですか?
他の文字列の配列に置き換えたい文字列の配列があります。 PHPの例を次に示します。 .Replace(<!> quot; old <!> quot;、<!> quot; new <!> quot;)を使用せずにC#でそのようなことを行うにはどうすればよいですか。
$patterns[0] = '/=C0/';
$patterns[1] = '/=E9/';
$patterns[2] = '/=C9/';
$replacements[0] = 'à';
$replacements[1] = 'é';
$replacements[2] = 'é';
return preg_replace($patterns, $replacements, $text);
解決 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 all。
他のヒント
実際の男性は正規表現を使用しますが、必要に応じて文字列に追加する拡張メソッドを次に示します。
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));
}
}
.Select()(.NET 3.5およびC#3)を使用して、コレクションのメンバーに関数を簡単に適用できます。
stringsList.Select( s => replacementsList.Select( r => s.Replace(s,r) ) );
正規表現のサポートは必要ありません。配列を反復処理する簡単な方法が必要です。
探しているのはSystem.Text.RegularExpressions
;
using System.Text.RegularExpressions;
Regex r = new Regex("=C0");
string output = r.Replace(text);
PHPの配列の振る舞いを取得するには、 `Regexの複数のインスタンスが必要です
ただし、この例では、.Replace(old、new)を使用する方がはるかに適切です。ステートマシンをコンパイルするよりもはるかに高速です。
編集:この質問は2.0のものであることに気付きましたが、3.5にアクセスできる場合は残しておきます。
もう1つ、Linqのことを取り上げます。ここで、List <!> lt; Char <!> gt;を使用しました。 Char []の代わりに、それはただそれが少しきれいに見えるようにするためです。配列にはIndexOfメソッドはありませんが、リストにはあります。なぜこれが必要なのですか?私が推測していることから、置換リストと置換されるリストの間に直接的な相関関係はありません。ただのインデックス。
それを念頭に置いて、Char []でこれをうまく行うことができます。ただし、IndexOfメソッドが表示されたら、その前に.ToList()を追加する必要があります。
これに似ています:someArray.ToList()。IndexOf
String text; List<Char> patternsToReplace; List<Char> patternsToUse; patternsToReplace = new List<Char>(); patternsToReplace.Add('a'); patternsToReplace.Add('c'); patternsToUse = new List<Char>(); patternsToUse.Add('X'); patternsToUse.Add('Z'); text = "This is a thing to replace stuff with"; var allAsAndCs = text.ToCharArray() .Select ( currentItem => patternsToReplace.Contains(currentItem) ? patternsToUse[patternsToReplace.IndexOf(currentItem)] : currentItem ) .ToArray(); text = new String(allAsAndCs);
これは、テキストを文字配列に変換し、それぞれを選択するだけです。現在の文字が置換リストにない場合は、そのまま文字を送り返します。置換リストにある場合、置換文字リストの同じインデックスの文字を返します。最後に、文字配列から文字列を作成します。
using System; using System.Collections.Generic; using System.Linq;