从正则表达式中删除不需要的匹配项

Removing unwanted matches from regex expression

我有一个字符串列表,例如:

现在我用于隔离需要裁剪的图像代码的正则表达式看起来像 ([\w\d-]+)(?=.+crop again),但在混合情况下 returns“Missing”、“image”和“08”有效。我怎样才能从结果中排除它?我再次猜测 lookahead/behind 但无法正常工作。奖励是 return 另一组中丢失的图像,因为我也需要它们。

非常感谢,

您可以使用

[\w-]+(?=(?:\s*,\s*[\w-]+)*\s+crop again)

regex demo

这里,

  • [\w-]+ - 匹配 1 个或多个字母、数字、下划线或连字符
  • (?=(?:\s*,\s*[\w-]+)*\s+crop again) - 随后是
    • (?:\s*,\s*[\w-]+)* - 0 次或多次重复用空格括起来的逗号,然后是 1+ 个单词/- 个字符
    • \s+ - 1+ 个空格然后
    • crop again - 文字子串。

假设图片代码总是遵循

这样的格式
  • P012V004-0061-01
  • P012CR0409F1-1-04
  • P012CR0409F1-1-05
  • P012CR0602F1-2-01

即可变长度的字母数字组合,然后是连字符,然后是数字,然后是连字符,然后是数字。

你可以这样做:

[a-zA-Z0-9]+-[0-9]+-[0-9]+