2013-08-13 5 views
0

У меня есть файл с кучей URL-адресов, я пытаюсь найти и заменить пробелы и изменить их на символы подчеркивания.Поиск и замена регулярных выражений в символах подчёркивания

Вот несколько примеров текста, я просто хочу добавить символы подчеркивания к имени файла.

<img style="width: 800px;" src="http://example.org/wp-content/uploads/2013/08/6K5A8111 to print.jpg" alt="" /> 

<img style="width: 800px;" src="http://example.orgv/wp-content/uploads/2013/08/Pizza Newbron Session 33psfb.jpg" alt="" /> 

Я пытаюсь сделать это с помощью поиска Sublimetext и замена с использованием регулярных выражений, но я не могу найти шаблон для использования. Любая помощь будет оценена по достоинству.

+0

Там нет имен файлов, выделенные жирным шрифтом в вашем вопросе. Может быть, подсветка синтаксиса SO заменила его? Где вы хотите заменить пробелы? В значениях внутри атрибута src? – lreeder

+0

Я хочу заменить его только в имени файла. Так что ** Pizza Newbron Session 33psfb.jpg ** превратится в ** Pizza_Newbron_Session_33psfb.jpg ** – CompMike

ответ

1

Я действительно не думаю, что это возможно разумным способом с помощью одной замены. Вы можете захотеть сделать глобально заменить все пробелы с подчеркиванием, а затем заменить такие вещи, как «альт с » альт и т.д.

2

Как это так получилось, что я написал фрагмент кода на некоторое время назад, чтобы заменить пробелы подчеркивает в выборе:

<snippet> 
    <content><![CDATA[${SELECTION/\s/_/g}]]></content> 
</snippet> 

Сохранить это как Packages/User/replace_space_with_underscore.sublime-snippet. Затем откройте Preferences -> Key Bindings - User и добавьте следующий ярлык:

{ "keys": ["ctrl+shift+-"], "command": "insert_snippet", "args": { "name": 
    "Packages/User/replace_space_with_underscore.sublime-snippet" } } 

Если это связывание ваш единственный пользовательский ключ, вы должны окружить его [] квадратные скобки, так это выглядит следующим образом:

[ 
    { "keys": ["ctrl+shift+-"], "command": "insert_snippet", "args": { "name": 
     "Packages/User/replace_space_with_underscore.sublime-snippet" } } 
] 

Теперь вы можете выделить URL-адреса, содержащие пробелы, ударить CtrlShift-, и они будут заменены символами подчеркивания. Определенно больше работы, чем регулярное выражение, но если верно answer Phillip Schmidt, это может быть лучшим способом сделать это. Удачи!

+0

Я расчесывал вопросы около 45 минут для этого точного Возвышенного вопроса и ответа. Это избавило меня ** часов ** от ручной замены пробелов в блоге, с которым я сталкиваюсь. Удивительный маленький фрагмент, который вы собрали вместе, спасибо! – maxinacube

+0

@maxinacube рад, что я мог бы помочь :) – MattDMo

1

При условии, что ваши теги - все изображения, имеющие аналогичный формат с надписями выше, вы можете выполнить это в одном регулярном выражении, используя положительные и отрицательные образы.

\s(?=(\w+))(?!style|alt|src|\d+px) 

Положительный Lookahead

Первый шаг в этом регулярном выражении, чтобы найти пробелы следуют один или более алфавитно-цифровых символов.

\s(?=(\w+)) 

Это выражение будет найти следующие матчи:

  • пространство между "IMG" и "стиль"
  • Пространство между "ширина" и "800px"
  • Пространство перед ЦСИ
  • Пробелы в имени файла
  • Пробел между именем файла и alt

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

Отрицательный Lookahead

Этот шаг нивелирует матчи мы не заинтересованы в:

(?!style|alt|src|\d+px) 

другой альтернативы, будет использовать два положительных lookaheads. Такой подход даст вам окончательное регулярное выражение, которое выглядит следующим образом:

\s(?=(\w+))(?=\w+(\s|\w)*\.[jpg]) 

Первая часть этого выражения является таким же, как описано выше. Второй взгляд выглядит немного более общим, ищем буквенно-цифровой символ, который следует за ним, а затем несколько буквенно-цифровых символов или пробелов несколько раз, за ​​которым следует расширение .jpg.

Второй Positive Lookahead

(?=\w+(\s|\w)*\.[jpg]) 
Смежные вопросы