2016-12-02 1 views
0

Also hier ist der Deal, ich möchte eine Nummer und eine Zeichenfolge, die danach kommt. Wie eine Einkaufsliste, "10 Bananen" oder "15 Äpfel". Das Problem ist, dass die gleiche Regex "10 Banane" entsprechen muss, aber nicht "10 Banana Milkshake".Wie man eine Schnur zusammenbringt und alles danach ignoriert?

Regexes ich schon versucht:

r"\b[0-9]{1,5}.banana" 
r"\b[0-9]{1,5}.banana\b" 
r"\b[0-9]{1,5}.banana$" 

Beispiel:

8 banana 3 banana ice cream 2 banana milkshake 5 banana 

Von dieser Zeichenfolge, ich brauche nur "8 Banane" entsprechen und "5 Banane".

Mit den Regexes habe ich versucht, es entspricht "X Banane" wie erwartet, aber ich will es genau "X Banane" (wo X ist eine Zahl, die 1-5 mal erscheint, wie in der Regex) und ignorieren wenn es danach etwas anderes gibt, wie "Eis" oder "Milchshake" in diesem Beispiel. Auch das "$" - Zeichen passt zu nichts, wenn ich es auf die Regex setze.

+2

Sorry, das ist nicht klar. Angesichts dieser Eingabe, was genau wollen Sie übereinstimmen? –

+0

[Ihre zweite Regex ist neben ideal] (https://regex101.com/r/8tO3pl/1). –

+0

@DanielRoseman Ich habe den ursprünglichen Beitrag bearbeitet, damit er hoffentlich klarer ist. Ich muss zum Beispiel "10 Bananen" aber nicht "10 Bananen Milchshakes" übereinstimmen. – Judaxx

Antwort

4

Verwenden Sie re.findall mit Lookahead Regex unten, es bestätigt Banane muss durch Ziffer oder Ende der Zeichenfolge folgen. s? nach Banane zu Plural Bananen auch zusammenpassen

import re 
s = '8 banana 3 banana ice cream 2 banana milkshake 5 banana' 
match = re.findall(r'\b[0-9]{1,5}.bananas?(?=\s?\d+|$)', s) 
# ['8 banana', '5 banana'] 
+0

Vielen Dank, das hat funktioniert. :) – Judaxx

+0

willkommen, froh, dass es hilft :) – Skycc

Verwandte Themen