2017-03-12 4 views
2

Ich versuche, Javascript-Code zu duplizieren, die wie folgt aussieht:Gibt es eine Möglichkeit, mehrere Ersetzungen in C# nacheinander durchzuführen?

car = document.transcription.text1.value; 
car = car.replace(/ん/g, "n"); 
car = car.replace(/つ/g, "tsu"); 
car = car.replace(/きゃ/g, "kya"); 
car = car.replace(/きゅ/g, "kyu"); 
car = car.replace(/きょ/g, "kyo"); 
... 

Es gibt mindestens weitere 50 ersetzt.

Gibt es eine Möglichkeit für mich, diese Funktionalität in C# zu duplizieren, indem Sie einen Ersatz nach dem anderen verketten?

+2

Ich weiß nicht, was ist "Auto", aber hast du versucht, "auto = auto.replace (/ ん/g," n "). ersetzen (/ つ/g," tsu ");"? – Guy

Antwort

0

Ja, es ist, Sie eine Erweiterungsmethode wie die folgenden verwenden könnte (Wenn Sie Regex wie für gleiche Ausdrücke verwenden müssen, um in die gleiche Buchstabenfolge zu übersetzen):

Und dann könnte man sie so concat (oder benutzen Sie einfach normale ersetzen, wenn sie alle einzigartig sind):

var car = // ... get the value somehow 
car = car.RegexReplace ("ん", "n") 
    .RegexReplace ("つ", "tsu") 
    .RegexReplace ("きゃ", "kya") 
    .RegexReplace ("きゅ", "kyu") 
    .RegexReplace ("きょ", "kyo"); 
    // ... other replacements 

ich den Code getestet haben und es scheint zu funktionieren: https://ideone.com/Yu7pUE

0

Als einfache Antwort,

car = car.replace(/ん/g, "n").replace(/つ/g, "tsu").replace(/きゃ/g, "kya").replace(/きゅ/g, "kyu").replace(/きょ/g, "kyo")...; 

für Obwohl 50+ ersetzt, die Sie gerade ein Wörterbuch oder Array oder was auch immer und Schleife durch sie machen wollen können.

1

Replace gibt ein string so halten Replace auf dem zurückgegebenen Wert wie folgt aufrufen:

var name = "How are you there buddy?"; 
name = 
    name 
     .Replace('H', '_') 
     .Replace('o', '_') 
     .Replace('w', '_'); 

Ein weiterer Ansatz

HINWEIS: Ich denke, der erste Ansatz einfacher ist und mehr intuitiv: Ob Sie ein Wörterbuch oder nur eine einfache Replace verwenden, müssen Sie noch eingeben Ersetzen und Ersetzen von Strings. Du entscheidest.

Wenn Sie alle zu ersetzenden Elemente und die ersetzenden Elemente in einem Wörterbuch behalten möchten, können Sie auch die Methode Zip von Linq verwenden. Lass dich nicht vom Namen ablenken, weil es nichts mit Zippen zu tun hat, wie beim Zippen einer Datei. Es hat seinen Namen von einem Reißverschluss auf der Kleidung. Der Reißverschluss an der Kleidung zählt beide Seiten des Reißverschlusses auf und schließt entweder die Zähne oder öffnet die Zähne einzeln. Genau das tut Zip auch. Sie geben es zwei IEnumerable<T> s und es wird beide aufzählen und auf Betrieb während jeder Aufzählung durchführen. Hier ist, wie:

var name = "How are you there buddy?"; 
var replacer = new Dictionary<string, string>(); 
replacer.Add("H", "_"); 
replacer.Add("o", "-"); 
replacer.Add("e", "*"); 

var names = replacer.Zip(name, (x, y) => name = name.Replace(x.Key, x.Value)) 
    .Last(); 

Das wird die Ausgabe sein, die genau das, was wir erwartet haben:

_-w ar* y-u th*r* buddy? 
2

Mindestens müssen Sie den Compiler sagen, was mit dem, was ersetzt werden sollte?

ein Wörterbuch erklären und erwähnen es als

Dictionary<string, string> replaces = new Dictionary<string, string>() 
{ 
    {"old1", "new1"}, 
    {"old2", "new2"}, 
    {"old3", "new3"} 
}; 

Dann in einer Schleife, können Sie dies als

foreach (var item in replaces) 
{ 
    str.Replace(item.Key, item.Value); 
} 
+0

Wäre nicht schön, wenn die Regex-Funktion, die aufgerufen wird, wenn Übereinstimmung gefunden wird, eine Wörterbuchsuche ermöglicht? Leider unterstützen sowohl JavaScript als auch C# eine solche Methode, die die Qualität des Quellcodes in der Frage ... fraglich macht. –

+0

@AlexeiLevenkov: Es gibt eine solche Funktion, siehe https://msdn.microsoft.com/en-us/library/ht1sxswy(v=vs.110).aspx, z. Regex.Replace (Eingabe, ".", Match => dictionary.ContainsKey (match.Value)? Wörterbuch [match.Value]: match.Value) – ckuri

+0

@ckuri Das wäre allerdings extrem ineffizient (und würde auch nicht funktionieren OPs Fall, da es auch Fälle mit 2 Buchstaben hat, da ein Wörterbuch-Lookup für ** jeden ** Buchstaben im Heuhaufen gemacht werden müsste (und eine Sekunde, wenn es tatsächlich eine Übereinstimmung gibt), und diese sind nicht billig . – GGG

Verwandte Themen