我需要一个正则表达式,即使我给了它整个路径,它也只匹配文件名中的内容,例如匹配x64
和nono
:
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)[^/]*$