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

nfeuvbwi  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(166)

我正在使用正则表达式搜索文件夹,以找到某些字符串匹配的文件,但我也需要排除其他字符串。例如,在下面的路径,我需要返回一个匹配的文件,包含字符串“MVP”从文件名只(不是从路径)。我需要它不匹配,如果字符串“失踪”是包括在文件名中(不是从路径)。文件类型还需要是.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”(不是来自路径)
1.匹配-文件名中包含“MVP”,文件名中不包含“Missing”
1.不匹配-文件名中有“MVP”,但文件名中确实包含“Missing”
我尝试使用下面的正则表达式,但它返回所有匹配,因为“MVP”在文件路径中。

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


也尝试了这个,它搜索文件名只像我需要的,但我不知道如何排除“失踪”的文件名。

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


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

brccelvz

brccelvz1#

这个正则表达式应该对你有用:

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

字符串
RegEx Demo

RegEx详情

  • ^:开始
  • (?=.*MVP[^\\]*$):积极的前瞻性AssertMVP在文件名部分(而不是路径)中找到,因为[^\\]*$将确保在匹配MVP之后没有\
  • (?!.*Missing[^\\]*$):当在文件名部分(而不是路径)中找到Missing时,负前瞻将使匹配失败
  • .*:匹配任何文本
  • \.:匹配点
  • (?:csv|xlsx?|txt):匹配其中一个扩展名
  • $:结束
u4dcyp6a

u4dcyp6a2#

如果您只想将文件名与这些条件相匹配,

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

字符串
https://regex101.com/r/zi8sKY/1

相关问题