2016-03-23 3 views
0

Ich versuche, einen regulären Ausdruck ähnlich den folgenden zu schreiben:Regulärer Ausdruck, die Leerzeichen nicht am Ende des Spiels enthalten wird

(PART 1)?\s*(PART 2)?\s*(PART 3)? 

Teile 1, 2 und 3 können oder nicht vorhanden sein und kann durch Leerzeichen getrennt sein oder auch nicht. Das oben genannte funktioniert fast, außer dass es am Ende des Matches dazu neigt, einen Platz herauszuziehen, wenn der letzte Teil (die letzten Teile) nicht vorhanden ist. Zum Beispiel wird es einen Raum im folgende Spiel herausziehen (wo ich die Pfeile hinzugefügt habe den Anfang und das Ende des Spiels zeigen):

-->(PART 1) (PART 2) <--(PART 4) 

Wie kann ich verhindern, dass es dies zu tun? Ich habe versucht, Lookaheads zu verwenden, aber ich kann nur herausfinden, wie man ein Leerzeichen am Ende der Zeile verhindert, nicht das Ende des Matches. Ich habe auch versucht, lazy Qualifiers auf die Leerzeichen zu verwenden, aber es zieht dann nachfolgende Teile nicht heraus.

+0

Bitte posten Sie die Beispiele, die Sie getestet haben. –

Antwort

2

Versuchen Sie, diese RegEx:

(PART 1)?(\s*PART 2)?(\s*PART 3)? 

Live Demo on Regex101


Wie es funktioniert:

(PART 1)?  # Selects PART 1 
(\s*PART 2)? # Selects Whitespace then PART 2 
(\s*PART 3)? # Selects Whitespace then PART 3 

Grundsätzlich wird es nur Leerzeichen wählen, wenn sie den nächsten Teil geht

+1

Es ist so offensichtlich, wenn Sie es so sagen, ich muss es zu lange anstarren! Vielen Dank! –

+0

@JamesBaker Ich weiß was du meinst, ich habe das selbe gemacht! ';)' – Druzion

Verwandte Themen