2016-12-14 3 views
1

ich das folgende Szenario haben, wo ich den RAM-Wert von String extrahiert werden wie folgt aus:Regex, die ein ganzes Wort negiert

1GB, 4GB ROM Android 5.1 3G 

Der RAM Wert ist 1GB

Currenlty, ich bin die Verwendung von folgende regex:

(\d+(?:\.\d+)?)\s?([Gg])[Bb] 

jedoch in diesem Fall ich auch den 4GB Wert, der die ROM v entspricht alue. Wie kann ich die Regex so schreiben, dass sie nicht übereinstimmt, wenn das Wort ROM folgt?

Danke

+0

Was passiert, wenn das ROM-Wort folgt nicht? Folgt Ihre Eingabe immer diesem Format? Kannst du das erste Match auf der Linie machen? –

+0

Hallo Tobias, danke für deine Antwort. Eigentlich kann ich mich nicht darauf verlassen, RAM kommt nicht immer zuerst – panipsilos

Antwort

5

eine negative Look-Ahead-

(\d+(?:\.\d+)?)\s?([Gg])[Bb](?!\s?[Rr][Oo][Mm]) 

Der (?!\s?[Rr][Oo][Mm]) Teil der folgende Zeichenfolge bedeutet Verwenden nicht \s?[Rr][Oo][Mm] übereinstimmen müssen.

Sie könnten die Verwendung der Pattern.CASE_INSENSITIVE Flag anstelle der Zeichengruppen, BTW in Betracht ziehen.

+0

Thns Fabian, es funktioniert gut. Als Follow-Up, wenn ROM dem Wert vorangestellt wird, wie würde die Regex dann aussehen? – panipsilos

+0

@panipsilos '(? fabian

1

Sie können folgende negative Vorschau verwenden:

(?i)\d+Gb(?!\s*ROM) 

Es Ziffern gefolgt von Gb übereinstimmen, aber nicht ROM

+0

Thnx Thomas, deine Antwort funktioniert auch. Ich kann nur eins wählen, also wählte ich Fabian, da hier zuerst geantwortet wurde. Allerdings habe ich auch deine hochgeladen – panipsilos