Hilfe bei der Manipulation einiger Strings

8

Meine Strings sind von dieser Art: City (PR) aus einer Datenbank, wobei PR für Provinz steht.

Am Ende möchte ich zwei separate Variablen. Stadt und PR.

Ich muss das mit C # machen. Irgendeine Idee? Danke.

    
Alex 20.05.2010, 14:04
quelle

8 Antworten

14

Angenommen, Städte enthalten keine ( -Zeichen:

%Vor%

city ist der Teilstring vom ersten Zeichen bis zum letzten ( -Zeichen. Das province ist der Teilstring vom ersten Zeichen nach dem letzten ( bis zum Ende ohne den letzten Zeichen.

    
dtb 20.05.2010 14:07
quelle
14

Sie können Regex und benannte Gruppen verwenden.

%Vor%

Regex Erklärung

(?<City>[^(]*)\((?<PR>[^)]*)\) :

  • (?<City>XXX) definiert eine Gruppe namens City
    • [^(]* entspricht einem beliebigen Zeichen, das kein ( zwischen 0 und unbegrenzten Zeiten ist
  • \( entspricht einem ( einmal
  • (?<PR>XXX) definiert eine Gruppe namens PR
    • [^)]* entspricht einem beliebigen Zeichen, das kein ) zwischen 0 und unbegrenzten Zeiten ist
  • \) entspricht einem ) einmal
Julien Hoarau 20.05.2010 14:13
quelle
10

Regex?

Sie können Ihr Muster in Erfassungsgruppen aufteilen und von dort fortgehen.

%Vor%

Das wird die Stadt in der ersten Gruppe und Ihre PR / Provinz Teil in der zweiten Gruppe erfassen.

Bearbeiten: madgnomes Regex entfernt die Parathesen aus dem Match, auch wenn der Regex an dieser Stelle unheimlich wird:)

    
Kirschstein 20.05.2010 14:07
quelle
2

Sie haben ein paar Methoden auf string Sie sind Split .

Beispiel

%Vor%

Das würde drucken:

Stadt

(PR)

Sie können es auch so machen

%Vor%

Sie können die Paranthese mit anderen String-Methoden entfernen, wenn Sie möchten.

Man könnte argumentieren, dass dies nicht der beste Weg ist. Es ist einfach und geben Sie wollen Sie wollen. Wie andere vorgeschlagen haben, ist Regex wahrscheinlich der "sauberste" Weg, es zu tun.

Hinweis

Wenn Sie Städte mit Leerzeichen im Namen unterstützen möchten, wird diese Methode nicht so gut für Sie funktionieren. Ich würde dann eine der anderen Antworten vorschlagen.

    
Filip Ekberg 20.05.2010 14:11
quelle
1

Wenn die Provinz immer in Klammern steht und der Städtename keine Klammern enthält, können Sie die Split-Funktion verwenden.

%Vor%

Die Balkenvariable enthält die Stadt in der ersten Spalte des Arrays und die Provinz in der zweiten Spalte (obwohl Sie die rechte Klammer entfernen möchten).

    
LittleBobbyTables 20.05.2010 14:09
quelle
1

Gibt es eine Chance, dass Sie das DB-Design so ändern können, dass es ein anderes Feld enthält, um festzulegen, ob es sich um eine Provinz oder einen Bundesstaat handelt? Dies ist ein schreckliches Design, und um es zu umgehen, müssen Sie definitiv etwas hässlichen Code schreiben ... Etwas in der Art von

%Vor%     
David 20.05.2010 14:12
quelle
1

Obwohl ausgezeichnete Analyseoptionen erwähnt wurden, möchte ich nur vorschlagen, dass Sie in Betracht ziehen, zur Quelle zu gehen und Ihre Datenbankabfrage und möglicherweise sogar die Datenbank selbst zu modifizieren.

Offensichtlich ist das nicht immer möglich, weshalb Sie die Frage wahrscheinlich so stellen, wie Sie sind, aber die Tatsache, dass Sie Daten auf diese Weise erhalten, bedeutet für mich, dass die Daten anders strukturiert oder erhalten werden müssen .

    
Randolpho 20.05.2010 14:13
quelle
0

Lassen Sie die folgende SQL SELECT-Anweisung die ganze Arbeit für Sie erledigen:

%Vor%

Hier ist der Datensatz, den ich zum Testen erstellt habe:

Joel, 1 Software-Straße, NewYork (NY), 12345
Jeff, 321 Horror Lane, San irgendwo (CAL), 90210
Zamboni, 888 Wpf Rd, Vancouver (Britisch-Kolumbien), V0S1A0
Bill, 7 Hauptstr., Vista (WA), 77777

    
Zamboni 20.05.2010 14:53
quelle

Tags und Links