-1

我正在循环一个图像文件名数组,如下所示:

  1. ConImage1 - Core.png
  2. ConImage211 - Core.png
  3. ConImage34 - Core.png
  4. ConImage09 - Core.png
  5. ConImage11 - Core.png
  6. ConImageOri23.png
  7. ConImageOri2.png
  8. ConImageOri11.png
  9. ConImageOri132.png
  10. ConImageForEng7 - Core.png
  11. ConImageForEng12 - Core.png
  12. ConImageForEng11 - Core.png
  13. ConImageForEng10 - Core.png
  14. ConImage1-不喜欢-Core.png
  15. ConImage1-喜欢-核心.png
  16. ConImage12 - 不喜欢 - Core.png
  17. ConImage12 - 喜欢 - Core.png
  18. ConImage34 - 不喜欢 - Core.png
  19. ConImage34 - 喜欢 - Core.png
  20. ConImage55 - 不喜欢 - Core.png
  21. ConImage55 - 喜欢 - Core.png

我需要一个仅匹配以下文件名的正则表达式模式:

  1. ConImage1 - Core.png
  2. ConImage211 - Core.png
  3. ConImage34 - Core.png
  4. ConImage09 - Core.png
  5. ConImage11 - Core.png

  6. ConImageOri23.png

  7. ConImageOri2.png
  8. ConImageOri11.png
  9. ConImageOri132.png

并排除包含以下单词的文件名:喜欢、不喜欢、ForEng 等。

编辑:

我不擅长正则表达式,但尝试这样的事情来限制我的搜索。

^(ConImage|(Orig|!ForEng)){1}[0-9\ \-]+[\W(Dislikes|Likes)][0-9\ \-]+(Core\.png)$/i/g

或者,以下内容可用于查找必要的文件,但如果出现一些奇怪的名称,例如 ConImageMaxx12 - Core.png 等,它也会选择它。

^ConImage((?!ForEng|Dislikes|Likes).)*$

我不想实现 VBA.Filter 功能,但需要一个正则表达式解决方案。

非常感激任何的帮助。

4

1 回答 1

1

没有特定的规则,很难想出一个正则表达式。要匹配您发布的特定值(并排除ConImageMaxx12您在评论中提到的值),您可以尝试:

编辑以更正缺少的“字符串开始”标记

^ConImage(?:Ori)?\d+(?:(?!(?:For|Likes)).)*$

该正则表达式匹配:

  • ConImage
  • 可选匹配Ori
  • 匹配一位或多位数字
  • 然后匹配字符串的其余部分,只要它不包含负前瞻中的子字符串(包括ForEngLikesDislikes其他派生词)

无法说明该组规则是否足以消除不需要的文件名,因为我只是根据您编写的内容猜测一些规则。

这是正则表达式的更正式的解释,其中包含一些教程解释的链接:

请注意,根据您的评论,我们设置了不区分大小写的选项

匹配特定文件名

^ConImage(?:Ori)?\d+(?:(?!(?:For|Likes)).)*$

选项:不区分大小写;^$ 匹配换行符

使用RegexBuddy创建

于 2020-01-21T02:13:42.793 回答