2016-09-28 43 views
0

剛開始學習python和正則表達式。REGEX制定條件

My regex: 
\b\d+\s+([A-Za-z]* |[A-Za-z]*\s+[A-Za-z]*)\s+\D+.. 

使用https://regex101.com/

串1:https://i.imgur.com/XNuXftW.jpg(爲什麼而胡蘿蔔/巧克力不具有不啤酒具有空格?)

串2https://i.imgur.com/nrl2FPB.jpg(添加進一步\ S +的[ A-Za-z]似乎不再起作用,爲什麼?)

字符串3https://i.imgur.com/qH0Z7Hi.jpg(與字符串2相同的問題)

我的問題是我如何繼續制定這樣它將包含上述條件?謝謝

在你需要自己測試的情況下,我提供瞭如下字符串。

=

+0

你沒有提到你的預期輸出是什麼。產品清單? – trincot

+0

是的!如果可能的話,打印後的產品清單 – user2947950

+0

不要忘記將答案標記爲已接受。 – trincot

回答

1

試試這個:

\d+\s+([A-Za-z ]*)\b *\D+ 

參見regex101

+0

KING OF REGEXXXXXXXXXXXXXXXXXXXXXX !!!!!!!!!!!!!!!!! IT WORKS – user2947950

1

你可以使用這個表達式,這需要的向後看(?<=)優勢和先行(?=),所以它只能捕獲產品名稱:

(?<=\s\s)\w+(?:\s\w+)*(?=\s\s) 

觀看演示上regex101.com

g修飾符配合使用。

+0

SWEEEEEEEEEEEEEEEEEEEEEEEEEEEEEET! LOVE YA – user2947950

1

我想在「|」之前的空格是一個導致它捕獲「啤酒」在串1例「巧克力蛋糕」並不因爲它與所述第二正則表達式,其是

[A-Za-z]*\s+[A-Za-z]* 

串2 匹配發生,因爲「啤酒」 [ A-ZA-Z] \ S + A-ZA-Z] 正則表達式正好兩個詞

匹配如何嘗試下面的正則表達式,從trincot修改

(?<=\s\s)(\w+\s)+(\w+)(?=\s\s) 
+0

您對我的回答所做的修改使其降級:它將始終在產品名稱的末尾選擇一個額外的空間。 – trincot

+0

已編輯!感謝提醒。畢竟我認爲你的正則表達式比我好 –