正则表达式删除最后一个下划线之前的所有字符,除非它附加到某个单词

ReGex to remove all characters before the last underscore unless it's attached to a certain word

我有一堆 png 文件。其中一半看起来像 name_001.png,但另一半有一个额外的下划线,看起来像 name_001_tr.png

我想做的只是删除名称部分,所以我正在考虑使用 RegEx,它只针对没有 "tr" 旁边的下划线,一个删除 下划线 .

之前的所有字符

感谢任何帮助,如果我能得到有用的东西,这会为我省去很多麻烦。谢谢!

编辑:有些名字中有破折号。

这应该让你到达那里:

^[^_]+_

https://regex101.com/r/jS5qP8/1

您需要使用替换函数将其替换为空字符串,具体取决于您使用的平台。

更新: 如果总是有一系列数字,并且这是您要捕获的内容的开始,您可以这样做:

^\D+_

https://regex101.com/r/gJ0vQ6/1

更新:这应该符合最新要求的条件:

.*?_(?=\d+)|\s*\d+(?=_tr.png)

https://regex101.com/r/rV2fV9/1