文件路径上的正则表达式,以匹配不以某个单词开头的文件名

2024-09-15 16:22:35 发布

您现在位置:Python中文网/ 问答频道 /正文

在包含具有完整路径的行的文本中,我只需要匹配文件名不以单词'TMP'开头的行(不区分大小写)

在下一个示例列表中,标记为“排除”的行不应匹配

c:\folder1\TMP_file.ext----------EXCLUDE
c:\TMP_folder1\file.ext
c:\folder1\TMP_folder2\file.ext
c:\folder1/TMP_file.ext----------EXCLUDE
c:\file.ext
c:\TMP_file.ext------------------EXCLUDE
TMP_file.ext---------------------EXCLUDE
file.ext

我提出了一个简单的表达式[^\\/\r\n]+$(接受'\''/'作为目录分隔符),它成功地将整个文件名与其扩展名匹配,但我不知道如何添加(?!...)来排除以“tmp”开头的匹配

反转表达式tmp[^\\/\r\n]+$也是解决方案,但我不知道如何实现

我知道这个问题与其他问题类似(冒着被否决的风险…),但我没有找到一种方法将它们与这个问题联系起来


Tags: 标记文本路径示例列表表达式文件名单词
2条回答

你可以用

(?i)^(?!(?:.*[/\\])?TMP(?![^\W_])[^/]*$).+

请参见regex demo[^/]替换为[^/\n],因为正则表达式是针对单个多行字符串进行测试的)

详细信息

  • ^-字符串的开头
  • (?!(?:.*[/\\])?TMP(?![^\W_])[^/]*$)-如果在当前位置的右侧,有
    • (?:.*[/\\])?-任何0+字符(尽可能多的换行字符除外)的可选出现,然后/\
    • TMP(?![^\W_])-TMP(不区分大小写)不后跟字母或数字(可后跟_
    • [^/]*-除/以外的任何0个或更多字符
    • $-字符串的结尾
  • .+-除换行符以外的一个或多个字符

正则表达式在这里不是正确的解决方案。您最好迭代文件名,采用基本路径,如果以“TMP”开头,则跳过

def filter_tmp(text):
    paths = text.split('\n')
    for p in paths:
        if not os.path.basename(p).startswith('TMP'):
            yield p

然后list(filter_tmp(text))将为您提供非临时路径的列表

相关问题 更多 >