2016-09-22 5 views
0

Ich möchte Folgendes mit nur einem Regex-Muster tun. (Ich habe keinen Zugriff auf Programmcode, ich kann nur ein Regex-Muster einfügen) Ich habe den Text als Eingabe, z.REGEX - Gruppe - JAVA

1000 lemons, 2 apples. 

Für den Fall „Zitronen“ Ich will die Nummer automatisch von ihnen, für den Fall „Äpfel“ ich automatisch die Anzahl von ihnen wollen.

2 

mit ONE RegexMuster

Mit dem RegexMuster wie

/\d+\s(apples)/ 

würde ich das Ergebnis

2 apples 

Aber ich will das Ergebnis erhalten.

Wie kann ich das tun?

+0

Bitte teilen Sie Ihren Code. Sie können eine Erfassungsgruppe um '\ d +' anstatt um 'Äpfel' herum verwenden. Vielleicht brauchen Sie nur '(\ d +) \ s * \ w +'. Oder '(\ d +) \ s * (?: Äpfel? | Zitronen?)' –

+0

@ WiktorStribiżew Aber in diesem Fall bekomme ich das Ergebnis "1000 Zitronen" ?? !! – CyKon

Antwort

1

Seit

ich keinen Zugriff auf Programmcode haben, kann ich einfügen nur ein RegexMuster

Sie benötigen einen positiven Look-Ahead-basierte regex (dh der Teil, der überprüft werden soll für aber von dem Ausgang muss in (?=....) Konstrukt verworfen wohnen):

\d+(?=\s*\w+) 

oder ein bisschen mehr spezifisch für Ihre Beispiele (wenn Sie brauchen Stellen vor bestimmten Wörtern nur)

\d+(?=\s*(?:apples?|lemons?)) 

Siehe regex demo 1 und demo 2 übereinstimmen.

Da lookaheads Text nicht konsumieren, ist der Text, den sie übereinstimmen, nicht in der Ausgabe enthalten.

nur um die Anzahl von Zitronen Suche verwenden

\d+(?=\s*lemons?) 

anzumerken, dass das vorhergehende Zeichen ? macht optional (1 oder 0 entspricht Vorkommen).

+0

Okay, sieht viel besser aus. Aber wenn ich nur die Anzahl der Zitronen brauche ?? – CyKon

+0

Behalte einfach die 'Zitronen' im Lookahead -' \ d + (? = \ S * Zitronen?) '. Das '' 'am Ende macht' s' optional. ** UND ** Sie können die Wörter auch mit '\ b' Wortgrenzen an * nur mit ganzen Wörtern * verbinden. –

+0

Großartig. Vielen Dank :) – CyKon