2016-12-02 127 views
0

所以這裏是交易,我想匹配一個數字和它後面的字符串。像購買清單一樣,「10個香蕉」或「15個蘋果」。問題是,相同的正則表達式必須匹配「10香蕉」,但不能匹配「10香蕉奶昔」。如何匹配一個字符串並忽略它後面的所有內容?

的正則表達式我已經嘗試過:

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

例子:

8 banana 3 banana ice cream 2 banana milkshake 5 banana 

從該字符串,我只需匹配 「8香蕉」 和 「5個香蕉」。

我嘗試過的正則表達式與預期的「X香蕉」相匹配,但我希望它完全是「X香蕉」(其中X是出現1-5次的數字,如在正則表達式中),並忽略如果它之後還有其他東西,比如這個例子中的「冰淇淋」或「奶昔」。另外,如果我把它放在正則表達式上,「$」符號不匹配任何東西。

+2

對不起,現在還不清楚。考慮到這些意見,你想要匹配什麼? –

+0

[你的第二個正則表達式接近理想](https://regex101.com/r/8tO3pl/1)。 –

+0

@DanielRoseman我編輯了原文,希望它更清晰。 我需要匹配,例如「10香蕉」,但不匹配「10香蕉奶昔」。 – Judaxx

回答

4

使用re.findall與下面的lookahead正則表達式,它聲稱香蕉必須跟隨數字或字符串的結尾。 s?香蕉配香蕉以後還有

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

非常感謝您的工作。 :) – Judaxx

+0

歡迎,很高興幫助:) – Skycc

相關問題