正则表达式匹配文件名中的字符串,同时排除另一个字符串

问题描述 投票:0回答:1

我使用正则表达式搜索文件夹以查找与某些字符串匹配的文件,但我还需要排除其他字符串。例如,在下面的路径中,我需要仅从文件名(而不是从路径)返回包含字符串“MVP”的文件的匹配项。如果文件名中包含字符串“Missing”(而不是来自路径),我需要它不匹配。文件类型还必须是 .csv、.txt、.xlsx 或 .xls。

\\p8files\MVP\Inbound\2023\202310\20231016\BillingProvEntityFix1016.xlsx
\\p8files\MVP\Inbound\2023\202310\20231016\BillingProv_MVP_EntityFix1016.xlsx
\\p8files\MVP\Inbound\2023\202310\20231016\BillingProv_MVP_Entity_MissingFix1016.xlsx

在上面的 3 个示例中,结果将是:

  1. 不匹配 - 文件名中缺少“MVP”(不是来自路径)
  2. 匹配 - 文件名中包含“MVP”,文件名中不包含“Missing”
  3. 不匹配 - 文件名中包含“MVP”,但文件名中包含“Missing”

我尝试使用下面的正则表达式,但它返回所有匹配项,因为“MVP”位于文件路径中。

^.*(?=^.*MVP)(?!^.*Missing).*(\.csv|\.xls|\.xlsx|\.txt)$

也尝试过这个,它只像我需要的那样搜索文件名,但我不知道如何从文件名中排除“丢失”。

\b.*MVP[^\\]*(\.csv|\.xls|\.xlsx|\.txt)$

任何帮助将不胜感激,谢谢!

马特

regex regex-lookarounds
1个回答
0
投票

这个正则表达式应该适合你:

^(?=.*MVP[^\\]*$)(?!.*Missing[^\\]*$).*\.(?:csv|xlsx?|txt)$

正则表达式演示

正则表达式详细信息

  • ^
    :开始
  • (?=.*MVP[^\\]*$)
    :正向前瞻断言在文件名部分(而不是路径)中找到
    MVP
    ,因为
    [^\\]*$
    将确保匹配
    \
     后不存在 
    MVP
  • (?!.*Missing[^\\]*$)
    :当在文件名部分(而不是路径)中找到
    Missing
    时,否定前瞻会使匹配失败
  • .*
    :匹配任何文本
  • \.
    :匹配一个点
  • (?:csv|xlsx?|txt)
    :匹配这些扩展名之一
  • $
    :结束
© www.soinside.com 2019 - 2024. All rights reserved.