2016-03-27 13 views
3

Ich möchte alles in einer Zeichenfolge bis zum letzten Leerzeichen abstimmen, aber ohne es einzuschließen. Aus Gründen des Beispiels würde Ich mag Charaktere passe ich in fett setzen:RegEx: Passe alles bis zum letzten Leerzeichen an, ohne es einzuschließen

RENATA T. GROCHAL

Ich habe ^(.+\s)(.+) jedoch Bisher ist es den letzten Raum paßt, und ich will es nicht. RegEx sollte auch für andere Sprachen als Englisch funktionieren, wie meins.

EDIT: Ich habe nicht erwähnt, dass die zweite Erfassungsgruppe kein Leerzeichen enthalten sollte - es GROCHAL nicht GROCHAL mit einem Raum, bevor es sein sollte.

EDIT 2: Mein neues RegEx auf das, was die beiden Antworten zur Verfügung gestellt haben, ist: ^((.+)(?=\s))\s(.+) und die RegEx verwendet, um die Spiele zu ersetzen ist \3, \1. Es führt zu dem erwarteten Ergebnis:

GROCHAL, RENATa T. 

Alle Verbesserungen wären wünschenswert.

+1

Wie wäre es passender '\ S +' Nicht-Leerzeichen vor '$' Ende: [(. +) '\ S (\ S +) $'] (https : //regex101.com/r/kS5pF8/1) und ersetzen durch '$ 2, $ 1' ähnliche @ medvedev1088 Lösung mit zwei Gruppen'^(. +) \ s (. +) ' –

+0

@bobblebubble Für mich ist Ihre Lösung viel besser als meiner. – menteith

+1

Ich habe für die Lösung von medvedev1088 gestimmt, da meine Idee sehr ähnlich ist. –

Antwort

3

^(.+)\s(.+)

mit -Ersatzzeichenfolge:

\2, \1

Update:

Eine andere Version, die zusätzliche Räume zwischen den zwei einfangende Gruppen kollabieren:

^(.+?)\s+(\S+)$

+2

Sie erklären lieber, warum er es versuchen muss und warum es sein Problem lösen kann. –

2

eine positive Vorgriffs-Assertion Verwendung:

^(.+)(?=\s) 

einfangende Gruppe 1 wird das Spiel enthalten.

0

ich mit dem Namen einfangenden Gruppen wie:

rawName = RENATA T. GROCHAL 
RegexMatch(rawName, "O)^(?P<firstName>.+)\s(?P<lastName>.+)", match) 
MsgBox, % match.lastName ", " match.firstName