C# - wie teilt man einen string rückwärts?
Was ich versuche zu tun, ist split ein string zurück. Bedeutung von rechts nach Links.
string startingString = "<span class=\"address\">Hoopeston,, IL 60942</span><br>"
Was ich tun würde, normalerweise ist dies.
string[] splitStarting = startingString.Split('>');
also meine splitStarting[1]
würde = "Hoopeston,, IL 60942</span"
dann würde ich das tun
string[] splitAgain = splitStarting[1].Split('<');
so splitAgain[0]
würde = "Hoopeston,, IL 60942"
Nun das ist, was ich tun will, ich will-split mit ''(Leerzeichen) Umgekehrt für die letzten 2 Instanzen von ' '.
Z.B. mein array zurückkommen würde, etwa so:
[0]="60942"
[1]="IL"
[2] = "Hoopeston,,"
Machen diese noch schwieriger ich immer nur die ersten beiden reverse-splits, also normalerweise würde ich so etwas tun
string[] splitCity,Zip = splitAgain[0].Split(new char[] { ' ' }, 3);
aber wie würden Sie das tun, die rückwärts? Der Grund dafür ist, weil es könnte sein, zwei Namen Stadt so eine extra " - ' brechen würde der name der Stadt.
- Ich wünschte, das problem ist, dass einige Leute tatsächlich von Ihr , wo es sein sollte, nach dem Staat. Ich bin versucht, Weg von Aufspaltung auf Komma, da Fälle wie diesen.
- darf ich Fragen, warum nicht Sie teilen möchten, auf die Letzte Zeichenfolge, die durch ','?
- weil Ihre eine manuelle Eingabe, so dass einige Menschen setzen ein Komma vor dem Staat, nach staatlichen...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Regulären Ausdruck mit benannten Gruppen zu machen die Dinge so viel einfacher. Keine Notwendigkeit, reverse strings. Nur pflücken, was Sie wollen.
Sollte, ergeben sich folgende Resultate:
Ich denke, man sollte es so machen:
Ergebnis enthalten, was Sie angefordert.
Eine mögliche Lösung - nicht optimal aber leicht zu Programmieren ist eine Umkehrung der Zeichenfolge, dann zu split die Zeichenfolge mit den "normalen" Funktion, dann auf Rückseite der einzelnen Teile aufgeteilt.
Eine weitere mögliche Lösung ist die Verwendung von regulären Ausdrücken statt.
Wenn Split könnte alles tun, gäbe es so viele überladungen, es würde verwirrend werden.
Nicht verwenden, split, nur benutzerdefinierte code mit substrings und lastIndexOf.
Können Sie einen regulären Ausdruck verwenden, um die drei Teile der Zeichenfolge in den tag, und verwenden Sie LINQ-Erweiterungen, um die Zeichenfolgen in der richtigen Reihenfolge.
Beispiel:
Ausgabe:
Wie etwa
-Bearbeiten-
ok verpasste den letzten Teil über das multi-Wort zitiert, können Sie immer noch verwenden Sie linq-obwohl:
erhalten Sie die
Die Stadt würde hier nicht aufgenommen werden, aber Sie könnten noch die ganze Sache in einem statement, aber es wäre ein wenig chaotisch:
Also sind wir
Wie gesagt, etwas chaotisch, aber es wird bekommen Sie das array, das Sie wollen. wenn Sie nicht benötigen, um ein array von diesem format könnte man natürlich simplfy den oben genannten code ein wenig.
könnten Sie auch tun:
Zuerst dachte ich, Sie verwenden sollten Array.Reverse () - Methode, aber ich sehe jetzt, dass es die Teilung auf der '' (space) das ist das Problem.
Ihre erste Wert kann ein Leerzeichen (z.B. "New York"), so dass Sie nicht wollen, um split zu Räumen.
Wenn Sie wissen, der string ist immer nur gehen zu müssen 3 Werte, dann könnte man die Verwendung von String.LastIndexOf(" ") und dann mit String.SubString() zu trimmen, dass aus-und tun Sie dann das gleiche wieder zu finden, den mittleren Wert und dann werden Sie Links mit dem ersten Wert, mit oder ohne Leerzeichen.
Stand vor ähnlichen Problem mit audio-Dateinamen-Konventionen.
Folgten diesem Weg: String Array-Konvertierung, Rückseite und split, und Umgekehrt jedes Teil wieder ganz normal.