我使用正则表达式搜索文件夹以查找与某些字符串匹配的文件,但我还需要排除其他字符串。例如,在下面的路径中,我需要仅从文件名(而不是从路径)返回包含字符串“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 个示例中,结果将是:
我尝试使用下面的正则表达式,但它返回所有匹配项,因为“MVP”位于文件路径中。
^.*(?=^.*MVP)(?!^.*Missing).*(\.csv|\.xls|\.xlsx|\.txt)$
也尝试过这个,它只像我需要的那样搜索文件名,但我不知道如何从文件名中排除“丢失”。
\b.*MVP[^\\]*(\.csv|\.xls|\.xlsx|\.txt)$
任何帮助将不胜感激,谢谢!
马特
这个正则表达式应该适合你:
^(?=.*MVP[^\\]*$)(?!.*Missing[^\\]*$).*\.(?:csv|xlsx?|txt)$
正则表达式详细信息
^
:开始(?=.*MVP[^\\]*$)
:正向前瞻断言在文件名部分(而不是路径)中找到 MVP
,因为 [^\\]*$
将确保匹配 \
后不存在
MVP
(?!.*Missing[^\\]*$)
:当在文件名部分(而不是路径)中找到 Missing
时,否定前瞻会使匹配失败.*
:匹配任何文本\.
:匹配一个点(?:csv|xlsx?|txt)
:匹配这些扩展名之一$
:结束