Регулярное выражение для изменения в случае предложения

Я использую Notepad ++ для замены текста в файле языка 5453 строки. Формат строк файла:

variable.name = Variable Value Over Here, that''s for sure, Really 

Двойной апостроф преднамерен.

Мне нужно преобразовать значение в случай предложения, за исключением слов «Здесь» и «Действительно», которые являются правильными и должны оставаться капитализированными. Как вы можете видеть, случай внутри значения обычно смешивается для начала.

Я немного поработал над этим. Все, что у меня есть до сих пор:

  (. )([AZ])(.+) 

который, по-видимому, по крайней мере выбирает правильные строки. Запасная часть – это то место, где я борюсь.

Замена Regex не может выполнять функцию (например, капитализацию) по совпадениям. Вам придется записывать скрипты, например, на PHP или JavaScript.

Обновление: см. Ответ Джонаса .

Я создал веб-страницу Text Utilities, чтобы делать такие вещи:

  • вставить текст
  • зайдите в «Найти, повторно выставить и заменить» (или нажмите Ctrl + Shift + F )
  • войдите в ваше регулярное выражение (мой будет ^(.*?\=\s*\w)(.*)$ )
  • проверьте опцию «Ограничения линии $ ^
  • выберите «Применить JS-функцию к совпадениям»
  • добавить аргументы (сначала это совпадение, затем суб-шаблоны), здесь s, start, rest
  • смените оператор return на return start + rest.toLowerCase();

Последняя функция в текстовой области выглядит следующим образом:

 return function (s, start, rest) { return start + rest.toLowerCase(); }; 

Возможно, добавьте некоторый код, чтобы использовать некоторые слова, такие как «Действительно» и «Здесь».

 Find: (. )([AZ])(.+) Replace: \1\U\2\L\3 

В Notepad ++ 6.0 или выше (который поставляется со встроенной поддержкой PCRE ).

В Notepad ++ вы можете использовать плагин PythonScript для выполнения задания. Если вы устанавливаете плагин, создайте новый скрипт так:

введите описание изображения здесь

Затем вы можете использовать следующий скрипт, заменяя регулярные выражения и функциональные переменные, как вам удобно:

 import re #change these regex = r"[az]+sym" function = str.upper def perLine(line, num, total): for match in re.finditer(regex, line): if match: s, e = match.start(), match.end() line = line[:s] + function(line[s:e]) + line[e:] editor.replaceWholeLine(num, line) editor.forEachLine(perLine) 

Этот конкретный пример работает, находя все совпадения в определенной строке, а затем применяя каждую функцию. Если вам нужна многострочная поддержка, сценарий Python «Conext-Help» объясняет все предлагаемые функции, включая функции pymlsearch / pymlreplace, определенные под объектом «editor».

Когда вы будете готовы запустить скрипт, перейдите в файл, который вы хотите запустить первым, затем перейдите в «Скрипты>» в меню сценария Python и запустите свой.

Примечание: в то время как вы, вероятно, сможете использовать функциональность notepad ++ для отмены, если вы испортитесь, может быть хорошей идеей сначала поместить текст в другой файл, чтобы убедиться, что он работает.

PS Вы можете «найти» и «пометить» каждое вхождение регулярного выражения, используя встроенный диалог поиска notepad ++, и если бы вы могли выбрать их все, то вы могли бы использовать функциональность TextFX «Characteracters-> UPPER CASE» для этой конкретной проблемы, но я «Не знаю, как перейти от отмеченного или найденного текста к выбранному тексту. Но, я думал, что опубликую это на случай, если кто-нибудь …

Изменить: в Notepad ++ 6.0 или более поздней версии вы можете использовать «PCRE (Perl Compatible Regular Expression) Search / Replace» (источник: http://sourceforge.net/apps/mediawiki/notepad-plus/?title=Regular_Expressions ). Таким образом, это может были решены с использованием регулярного выражения типа (. )([Az])(.+) с аргументом замены, подобным \1\U\2\3 .

У вопросника был очень конкретный случай. В качестве общего «изменения в случае предложения» в блокноте ++ первое предложение регулярного выражения не работало правильно для меня. в то время как не совершенный, вот измененная версия, которая была большим улучшением оригинала для моих целей:

 find: ([\.\r\n][ ]*)([A-Za-z\r])([^\.^\r^\n]+) replace: \1\U\2\L\3 

У вас все еще есть проблема с именами нижних регистров, именами, датами, странами и т. Д., Но хороший справки может помочь с этим.

  • проверять натуральный номер ввода с помощью ngpattern
  • Regex пустая строка или электронная почта
  • Как именно метод String.split () в Java работает при регулярном выражении?
  • Regex любой символ ASCII
  • PatternSyntaxException: незаконное повторение при использовании regex в Java
  • Есть ли команда linux, например mv, но с регулярным выражением?
  • Notepad ++ и регулярное выражение: извлечь строку и два числа из списка строк
  • Используя grep в R, чтобы найти строки как целые слова (но не строки как часть слов)
  • Создать массив совпадений регулярных выражений
  • Oracle 11g получает все согласованные вхождения регулярным выражением
  • Заменить последнюю часть строки
  • Interesting Posts

    Virtualbox -> Невозможно добавить 2-й адаптер в сеть для VM

    центр MessageBox в родительской форме

    Как перемещать невидимые окна => Не удается получить доступ к моему приложению после переключения мониторов

    Периодичность выполнения задачи (один раз в день / раз в неделю)

    Как использовать условное форматирование на основе сроков в Excel 2013?

    Как я могу запускать однострочные приложения несколько раз на одном компьютере без VMWare?

    Параметры объединения пула с JDBC: DBCP vs C3P0

    Проверка MVC Force jQuery для группы элементов

    Сценарий расписания R с использованием cron

    Как динамически изменять размер изображения с помощью CSS при изменении ширины / высоты браузера?

    Почему CLOCKS_PER_SEC не является фактическим числом часов в секунду?

    Общие рекомендации по отладке в R

    Поддерживает ли C ++ счетчики времени компиляции?

    Как вернуться в предыдущее окно на OS X?

    фатальная ошибка: замена места с самим собой не поддерживается с помощью Swift 2.0

    Давайте будем гением компьютера.