2016-05-12 172 views
3

任何人都可以用RegEx帮助我吗? 我想删除饮料中的所有不必要的信息,例如大小,数量等等。RegEx匹配得太早

我做了这个表达式:/(?<!^)(\d{1,2}\s?x\s?)?\d{1,2}((,|\.)\d{1,2})?\s?L?/igU

25 Test Drink 60% 12x1,0L它匹配525

对于Test Drink 60% 12x1,0L它匹配%之前的60

我该如何避免这些例子?我只想匹配12x1,0L。我不得不放置如此多的可选字符,因为数据源在数量和大小的格式上非常不一致。它也可能发生数量缺失,因为它只有一个瓶子/罐子。

我提供了更多的例子下面的标题,在这里:https://regex101.com/r/aQ2kO8/2

25测试饮料60%12x1,0L
测试饮料60%2x0,5
测试饮料3×0.75升
测试饮料4x0,75大号
测试饮料5×0,75L
试验饮料66 X 0,75
测试饮料0,75
测试饮料0.75
7UP 12 x 1 L

有人可以帮我解决这个问题吗?

+0

你可以给'(?:\ d + \ s * x \ s *)?(?:\ d + [。,])?\ d + \ s * L?\ s * $'a try?不知道我是否正确地获得了所有要求。 –

+0

它是否像你正在寻找的模式应该总是以'L'结尾? – nu11p01n73R

+0

@SebastianProske感谢您的建议,但它只匹配我链接中的最后一个示例。我添加了'?',因为这些字符只是可选的,可能不会出现在标题中。如果你想测试多行代码,请检查我在链接中提供的更多示例 –

回答

1

您可以使用(?:\d+\s*x\s*)?(?:\d+[.,])?\d+\s*L?\s*$作为搜索模式,您必须设置m和g修饰符,如果您将其应用于多行文本。此外,如果你不喜欢的l成炭情况和x

  • (?:\d+\s*x\s*)?可选匹配的数字后面是x可能用空格
  • (?:\d+[.,])?匹配任意数字后包围可能需要我修饰符由点或逗号
  • \d+匹配一个或多个数字
  • \s*L?\s*任选匹配L可能由空间
  • 包围
  • $匹配行结束。从你的描述中,你想要匹配的东西总是在最后,通过使用这个,我们可以避免在饮料名称中匹配数字

看一看regex101 demo