Маленький Вим Регекс - PullRequest
       2

Маленький Вим Регекс

1 голос
/ 28 июля 2010

У меня есть несколько строк, которые выглядят так: '../DisplayPhotod6f6.jpg?t=before&tn=1&id=130', и я хотел бы вынести все после знака вопроса, чтобы выглядеть как '../DisplayPhotod6f6.jpg'.

s/\(.\.\.\/DisplayPhoto.\{4,}\.jpg\)*'/\1'/g

Это регулярное выражение захватывает некоторые, но не все случаи, понимаете почему?

Ответы [ 5 ]

4 голосов
/ 28 июля 2010

\.\{4,} пытается сопоставить 4 или более . символов. Выглядит так, как вы хотели: «соответствует 4 или более символам» (.\{4,}), но «соответствует 4 или более не . символам» ([^.]\{4,}) может быть более точным. Вам также необходимо изменить значение * в конце шаблона на .*, поскольку * в настоящее время применяется ко всей группе \(\).

3 голосов
/ 29 июля 2010

Я думаю, что самый простой способ сделать это:

s/?.*$/'/g

Это говорит: удалите все после знака вопроса и замените его одинарной кавычкой.

1 голос
/ 29 июля 2010

Я бы использовал макросы, иногда более простые, чем регулярные выражения (и интерактивные):

qa
/DisplayPhoto<Enter>
f?dt'
n
q

А затем несколько @a или 20000@a, чтобы пройти все строки.

1 голос
/ 28 июля 2010

следующее регулярное выражение: /(\.\./DisplayPhoto.*\.jpg)/gi

проверено на следующих примерах:

../DisplayPhotocef3.jpg?t=before&amp;tn=1&amp;id=54
../DisplayPhotod6f6.jpg?t=before&amp;tn=1&amp;id=130

приведет к:

../DisplayPhotocef3.jpg
../DisplayPhotod6f6.jpg
0 голосов
/ 29 июля 2010
%s/\('\.\.\/DisplayPhoto\w\{4,}\.jpg\).*'/\1'/g

Некоторые заметки:

  • % заставит своп работать на всех линиях.
  • \ w вместо '.', В случае, если есть неправильные имена файлов.
  • Заменить "." в начале вашего подходящего регулярного выражения с ', что и должно совпадать.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...