Вопрос по regex, case – Regex, чтобы изменить на случай предложения

37

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

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

Двойной апостроф является намеренным.

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

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

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

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

Почему «здесь» и & quot; Действительно & quot; собственно? John Pirie

Ваш Ответ

4   ответа
6

этой работы. Если вы устанавливаете плагин, создайте новый скрипт следующим образом:

enter image description here

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

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 & quot; Conext-Help & quot; объясняет все предлагаемые функции, включая функции pymlsearch / pymlreplace, определенные в «редакторе»; объект.

Когда вы будете готовы запустить свой скрипт, сначала перейдите к файлу, который вы хотите запустить, а затем перейдите к & quot; Scripts & gt; & quot; в меню Python Script и запустите свой.

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

Постскриптум Вы можете "найти" и «метка»; каждое вхождение регулярного выражения, используя встроенный диалог поиска notepad ++, и, если бы вы могли выбрать их все, вы можете использовать TextFX & s; функциональные возможности для этой конкретной проблемы, но я не уверен, как перейти от отмеченного или найденного текста к выделенному тексту. Но я думал, что опубликую это на тот случай, если кто-нибудь сделает ...

Edit: В Notepad ++ 6.0 или более поздней версии вы можете использовать & quot; PCRE (совместимое с Perl регулярное выражение) Поиск / замена & quot; (источник:http://sourceforge.net/apps/mediawiki/notepad-plus/?title=Regular_Expressions) Так что это можно было бы решить с помощью регулярных выражений типа(. )([A-z])(.+) с аргументом замены, как\1\U\2\3.

Error: User Rate Limit Exceededperldoc.perl.org/perlre.htmlError: User Rate Limit Exceeded\UError: User Rate Limit Exceeded
147
Find:    (. )([A-Z])(.+)
Replace: \1\U\2\L\3

PCRE служба поддержки).

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded\uError: User Rate Limit Exceeded\lError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit ExceedednotError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
3

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

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

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

Error: User Rate Limit Exceeded
12

использование заглавных букв) для совпадений. Вы должны написать это, например, в PHP или JavaScript.

Update: УвидетьJonas & APOS; ответ.

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

paste your text go in "Find, regexp & replace" (or press Ctrl+Shift+F) enter your regex (mine would be ^(.*?\=\s*\w)(.*)$) check the "^$ match line limits" option choose "Apply JS function to matches" add arguments (first is the match, then sub patterns), here s, start, rest change the return statement to return start + rest.toLowerCase();

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

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

Может быть, добавить код для заглавных букв, таких как & quot; Really & quot; и "Здесь".

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededvim.wikia.com/wiki/Changing_case_with_regular_expressions
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded jkramp

Похожие вопросы