正则表达式正在删除文件名的最后一个字符

时间:2009-03-11 14:47:07

标签: regex

任何人都知道为什么会这样:

Filename:     031\_Lobby.jpg

RegExp:       (\d+)\_(.*)[^\_e|\_i]\.jpg

Replacement:  \1\_\2\_i.jpg

这产生了这个:

031\_Lobb\_i.jpg

出于某种原因,它正在砍掉第二个背后的最后一个角色 - 引用(“Lobby”中的“y”。当我删除[^_e|_i]时,这样做,所以我必须做出与此相关的错误。

谢谢!

3 个答案:

答案 0 :(得分:4)

你强迫它用正则表达式的这一部分砍掉最后一个字符:

[^_e|_i]

其翻译为:除"_""e""|""i"以外的任何单个字符。

"y"中的"Lobby"符合此标准。

显然,你意味着 "not _e""not _i",但这不是表达它的方式。这是对的:

(\d+)_(.+)(?<!_[ei])\.jpg

请注意,点需要在正则表达式中进行转义。

答案 1 :(得分:1)

它正在删除“y”,因为[^ _e | _i]匹配y,而.*匹配y之前的所有内容。

答案 2 :(得分:-1)

你强迫它的最后一个字符与_e和_i不同。你应该使用它(注意最后的*):

(\d+)_(.*)[^_e|_i]*.jpg