регулярное выражение обрезает последний символ имени файла - PullRequest
2 голосов
/ 11 марта 2009

Кто-нибудь знает, почему это происходит:

Filename:     031\_Lobby.jpg

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

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

, который производит это:

031\_Lobb\_i.jpg

По какой-то причине он вырезает последний символ из второго ссылка ("у" в "Лобби". Это не делает это, когда я удаляю [^_e|_i], поэтому я должен делать что-то не так, что связано с этим.

Спасибо!

Ответы [ 3 ]

4 голосов
/ 11 марта 2009

Вы заставляете его отрубить последний символ этой частью вашего регулярного выражения:

[^_e|_i]

Что переводится как: любой отдельный символ, кроме "_", "e", "|", "i".

"y" в "Lobby" соответствует этому критерию.

Вы имеете в виду "not _e" и "not _i", очевидно, но это не способ выразить это. Это было бы правильно:

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

Обратите внимание, что точку необходимо экранировать в регулярных выражениях.

1 голос
/ 11 марта 2009

удаляет «y», потому что [^ _e | _i] соответствует y, а .* соответствует всему, что до y.

0 голосов
/ 11 марта 2009

Вы заставляете его иметь последний символ, отличный от _e и _i. Вы должны использовать это вместо (обратите внимание на последний *):

(\d+)_(.*)[^_e|_i]*.jpg
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...