2016-09-28 41 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

已编辑!感谢提醒。毕竟我认为你的正则表达式比我好 –