正则表达式匹配得太早

RegEx is matching too early

谁能帮我做正则表达式? 我想删除饮料标题中所有不必要的信息,如尺寸、数量等。

我制作了这个正则表达式:/(?<!^)(\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。我不得不放这么多可选字符,因为数据源在数量和大小的格式上非常不一致。也有可能是数量少了,因为只有一个bottle/can.

我在下方和此处提供了更多示例标题:https://regex101.com/r/aQ2kO8/2

25 Test Drink 60% 12x1,0L
Test Drink 60% 2x0,5
Test Drink 3 x 0,75 L
Test Drink 4x0,75 L
Test Drink 5 x 0,75L
Test Drink 66 x 0,75
Test Drink 0,75
Test Drink 0.75
7UP 12 x 1 L

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

您可以使用 (?:\d+\s*x\s*)?(?:\d+[.,])?\d+\s*L?\s*$ 作为搜索模式,如果将其应用于多行文本,则必须设置 m- 和 g- 修饰符。如果您不关心 lx

的字符大小写,也可能需要 i-modifier
  • (?:\d+\s*x\s*)? 可选地匹配数字后跟可能被空格包围的 x
  • (?:\d+[.,])? 可选择匹配后跟点或逗号的数字
  • \d+ 匹配一个或多个数字
  • \s*L?\s* 可选地匹配可能被空格包围的 L
  • $ 匹配行尾。根据你的描述,你要匹配的东西总是在最后,通过使用这个我们可以避免在饮料名称中匹配数字

看看regex101 demo