| 

.NET C# Java Javascript Exception

4
Ich habe in einem String einige Wörter zu ersetzen. Mitunter Wörter die teilweise öfter vorkommen, aber konkateniert mit anderen Wörtern. Beispiel:

Lastname
Pers1Lastname
Pers2Lastname

Nun, wenn ich "".Replace("Lastname", "Nachname") einsetze, so werden alle "Lastname" gefunden und ersetzt.

Meine Frage: Wie kann ich hier sicher vorgehen und ausschließlich das einzelne Wort "Lastname" ersetzen, ohne das die anderen, wo lediglich das entsprechende Wort vorkommt, mit ersetzt werden?
News:
14.10.2011
Mario Priebe 6,0k 3 9
3 Antworten
2
Ein wenig unglücklich ist, das in dem Beispiel Lastname ausgerechnet zu Beginn steht. Wäre es sonst nicht am einfachsten, CRLF & "Lastname" durch CRLF & "Nachname" zu ersetzen? Würde dann halt nur beim ersten Vorkommen nicht funktionieren, was die Idee gerade ein wenig diszqualifiziert :) Aber wie heisst es noch? Keep it simple.

PS: Wobei ich gerade bemerke WER hier die Frage stellt und ich denke mal das Du darauf selbst gekommen wärst. Also muss da ein Haken dran sein :)
14.10.2011
Jens Duczmal 2,6k 1 3 9
Jens Duczmal 2,6k 1 3 9
Das ist es ja, ich weiß halt nicht, an welcher Stelle das einzelne Lastname steht. Zeilenumbrüche habe ich in den String wo die entsprechenden Wörter vorkommen keine.
Mario Priebe 14.10.2011
Falls in dem String Leerzeichen sind, könntest Du dann doch aber "Lastname " ersetzen. Ohne Trennzeichen aneinandergereiht werden die Wörter ja eher nicht sein, oder?
Jens Duczmal 14.10.2011
Eine ähnliche Frage, allerdings nur zum Finden eines Strings, findest Du hier: http://stackoverflow.com/questions/4131443/c-sharp-find-exact-match-in-string
Dummerweise ohne das Replace.
Jens Duczmal 14.10.2011
hmm, das stimmt. Mein Suchstring sollte so immer vorn und hinten dran ein Leerzeichen haben, so passt das. Naja manchmal sieht man den Wald vor lauter Bäume nicht. Vielen Dank!
Mario Priebe 14.10.2011
naja oder auch nicht, egal, dann muss ich mir die gefundenen Wörter halt genauer anschauen.
Mario Priebe 14.10.2011
1
Gern geschehen. Ich bin mal kurz weg und klopfe mir auf die Schulter :)
Jens Duczmal 14.10.2011
1
Spielverderber..... da hat sich die Antwort überschnitten. Ein(!) Leerzeichen hinter dem Wort müsste ja eigentlich immer da sein. Bis auf das letzte Wort. Da könnte es ja Abhilfe schaffen, ein Leerzeichen an den String anzuhängen, bevor Du das Replace drüber jagst.
Jens Duczmal 14.10.2011
4
Mit Regex.Replace sollte das so funktionieren
Regex.Replace(inputString, "(\s+|^)Lastname(\s+|$)", "Nachname");

also hier ein Beispiel
Regex.Replace("Lastname Pers1Lastname Lastname Pers2Lastname Lastname", "(\s+|^)Lastname(\s+|$)", "Nachname");

Ich habe das jetzt zwar nur mir dem Regexlab getestet, aber dort wird das jedenfalls richtig ersetzt

EDIT: Da ist dann auch wurst ob das Lastname ganz vorne, in der Mitte oder Hinten steht.
Da mit der Regex Expression immer Vorne oder Hinten ein Leerzeichen oder das Ende / Anfang sein muss
14.10.2011
michlG 1,7k 1 5
michlG 1,7k 1 5
escapen noch und dann passt das perfekt! Danke auch dir!
Mario Priebe 15.10.2011
3
Das Endresultat noch ergänzend für die Nachwelt, falls sich jemand mal mit dem selben Problem hierher verläuft ;)

string str = "Lastname Pers1Lastname Pers2Lastname Firstname Pers1Firstname Pers2Firstname";           

Dictionary<string, string> map = new Dictionary<string, string>();
map.Add("Lastname", "Nachname");
map.Add("Firstname", "Vorname");

foreach (var m in map)
str = Regex.Replace(str, string.Format(@"(\s+|^){0}(\s+|$)", m.Key), String.Format(" {0} ", m.Value));

var where = str.TrimStart().TrimEnd();


output:
Nachname Pers1Lastname Pers2Lastname Vorname Pers1Firstname Pers2Firstname


Nochmal vielen Dank an alle Beteiligten : )

(Asche auf mein Haupt, dass ich die Antwortfunktion nutze, nur wegen dem Quellcode, so sieht das ganze etwas "geschmeidiger" aus :)
15.10.2011
Mario Priebe 6,0k 3 9

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH