Laden...

Suche nach ersetzen Funktion

Erstellt von Der Tim vor 17 Jahren Letzter Beitrag vor 17 Jahren 2.276 Views
D
Der Tim Themenstarter:in
130 Beiträge seit 2005
vor 17 Jahren
Suche nach ersetzen Funktion

Hallo,

ich suche eine Funktion zum ersetzen von einem Teilstring in einem String.
Am besten kurz mein Source dazu:

string value = "Hello to Mrs. Tim Smith and Mr. Smith.";            

            Console.Out.WriteLine(value);
            
            Console.Out.Write("Suchtext: ");
            string search = Console.ReadLine();
            Console.Out.Write("Ersetztext: ");
            string replace = Console.ReadLine();

            while(value.IndexOf(search) > -1)            
            {
                int begin = value.IndexOf(search);
                value = (value.Substring(0, begin) + replace + value.Substring(begin + search.Length));


            }
            Console.Out.WriteLine(value);

Logischer weise bekomme ich ein Problem, wenn ich Tim durch Timotheus ersetzen möchte -> Endlosschleife.

Was mich nur interessiert, ob es schon dafür vorgefertigte Funktionen gibt oder muss da noch etwas selber geschrieben werden?

TIM 🙂

T
243 Beiträge seit 2006
vor 17 Jahren

Wie wär's mit:

value = value.Replace(search, replace);
D
Der Tim Themenstarter:in
130 Beiträge seit 2005
vor 17 Jahren

Hi, danke für die Antwort.

Weißt du auch, ob es auch für diese Funktion auch so etwas wie wildcards gibt?

TIM 🙂

M
1.439 Beiträge seit 2005
vor 17 Jahren

Regex.Replace

D
Der Tim Themenstarter:in
130 Beiträge seit 2005
vor 17 Jahren

Hi,

leider bekomme ich das noch nicht ganz so hin.

Beispiel:
Ich habe den String "Ich bekomme ein neues C Sharp Buch."

Was ich suche, ersetze "b*e" durch "habe".

Ergebnis:
"Ich habe ein neues C Sharp Buch."

Leider bekomme ich auch nicht den Funktionsumfange wie es in der MSDN steht.

http://msdn2.microsoft.com/de-de/library/system.text.regularexpressions.regex.replace.aspx

Was ich eigentlich nur suche ist ein * für beliebig viele Zeichen und ein ? nur für ein Zeichen steht.

Kann mir da jemand weiter helfen?

TIM 🙂

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo Der Tim,

Was ich eigentlich nur suche ist ein * für beliebig viele Zeichen und ein ? nur für ein Zeichen steht.

ein beliebiges Zeichen: .
beliebig viele beliebige Zeichen: .*

herbivore

D
Der Tim Themenstarter:in
130 Beiträge seit 2005
vor 17 Jahren

Hi herbivore,

das mit dem "." für ein zeichen funktioniert, leider geht es noch nicht mit dem "*".

Beispiel:

string value = "Hello to Mrs. Tim Smith and Mr. Smith.";            
Console.Out.WriteLine(value);
Console.Out.WriteLine(System.Text.RegularExpressions.Regex.Replace(value, "H...o", "Hey"));
Console.Out.WriteLine(System.Text.RegularExpressions.Regex.Replace(value, "H.*o", "Hey"));

Ausgabe:

Hello to Mrs. Tim Smith and Mr. Smith.
Hey to Mrs. Tim Smith and Mr. Smith.
Hey Mrs. Tim Smith and Mr. Smith.

Wie zu sehen fällt bei der letzten Ausgabe das to weg. Kannst du mir sagen wieso das passiert?

TIM 🙂

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo Der Tim,

weil .* gierig ist. Verwende .? oder noch besser \w

Die Syntax bzw. die Bedeutung der Regex-Pattern ist auch in der SDK-/MSDN-Doku gut beschrieben.

herbivore

D
Der Tim Themenstarter:in
130 Beiträge seit 2005
vor 17 Jahren

Hi herbivore,

cool nun funktioniert es. Finde es lustig, dass-* zu gierig ist.

Eine letzte Frage hab ich aber noch. Gibt es auch so etwas wie nur Wörter ersetzen oder wird das am besten mit Leerzeichen geregelt?

Beispiel:

"Ich fahre mit dem Auto auf der Autobahn."

Wenn ich nur Auto ersetzen möchte, geht auch nur mit einem Wort. Hier würde Autobahn nicht ersetzt da Auto ein ganz anderes Wort ist.

Tim 🙂

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo Der Tim,

verwende dazu \b - Beschreibung wie gesagt in der Doku. 🙂

herbivore

D
Der Tim Themenstarter:in
130 Beiträge seit 2005
vor 17 Jahren

Hi herbivore,

du hast recht es steht in der Doku bekomme_einen_roten_kopf.

Leider habe ich doch noch eine Frage.
Was mache ich, wenn ich die regulären Ausdrücke nicht als Ausdruck, sondern als Text nutzen möchte?

Beispiel:

Orginal "\test\b"

Suchtext "\btest\b" durch hallo ersetzen.

Verstehst du was ich meine?

TIM 🙂

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo Der Tim,

Regex.Escape

herbivore

D
Der Tim Themenstarter:in
130 Beiträge seit 2005
vor 17 Jahren

Vielen noch einmal.

Hoffentlich klappt nun alles 😉

TIM 🙂