仅匹配文件名的正则表达式

仅匹配文件名的正则表达式

我需要一个正则表达式,即使我给了它整个路径,它也只匹配文件名中的内容,例如匹配x64nono

x64/x64/x64/lol/me.me <- will NOT match
nono.meme <- will match
god_knows/x64.something <- will match
lalala <- will NOT match
somewhere/subfolder/x64-headache/out/gg.exe <- will NOT match
nono/launcher.exe <- will NOT match

我尝试过很多变体,最有希望的是.*(x64|nono)(?!\/).*,但它也匹配“somewhere/subfolder/x64-headache/out/gg.exe”,而我并不需要。我还尝试[^\/\n]*在它前面添加或在中间添加另一个“.*?”,但这要么没有效果,要么完全破坏了它。

当然,我曾尝试在 Google 上搜索这个问题,但我发现的所有结果都只是在匹配后解析文件名,或者他们建议准备路径以便只匹配文件名,但不幸的是,在我的情况下这是不可能的。

答案1

你需要代替.匹配文本 (接受任何字符,包括路径分隔符) 后面的 变成([^/]不接受)。因此,例如,.*变成[^/]*

您还需要使用 将正则表达式锚定到字符串的末尾$,这样它就不会接受匹配部分之后的内容,并确保最后一个[^/]*(即不包括/)有效。(如果您使用 re.fullmatch() 隐式锚定开始和结束,则不需要。)

如果您使用 re.match() 来锚定到开始处:.*(x64|nono)[^/]*$

如果您正在使用 re.search() 但其不具备以下功能:(x64|nono)[^/]*$

相关内容