Подтвердить что ты не робот

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

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

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

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

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

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

 (. )([A-Z])(.+)

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

4b9b3361

Ответ 1

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

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

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

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

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

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

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

Ответ 2

Find:    (. )([A-Z])(.+)
Replace: \1\U\2\L\3

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

Ответ 3

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

enter image description here

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

import re

#change these
regex = r"[a-z]+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 script "Conext-Help" объясняет все предлагаемые функции, включая функции pymlsearch/pymlreplace, определенные под объектом "editor".

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

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

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

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

Ответ 4

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

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

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