Выполните расчет по захваченному числу в регулярном выражении, прежде чем использовать его в качестве замены - PullRequest
2 голосов
/ 14 марта 2009

Используя регулярное выражение, я могу найти набор чисел, которые я хочу заменить. Однако я хочу заменить число другим числом, которое рассчитывается с использованием исходного - захваченного - числа.

Возможно ли это в notepad ++ с использованием своего рода выражения в замещающей части?

Редактировать: Может быть, странная мысль, но можно ли выполнить вычисление в части поиска, генерируя второе захваченное число, которое фактически будет результатом?

Ответы [ 4 ]

3 голосов
/ 03 апреля 2009

Даже если это возможно , это почти наверняка будет "грязно" - почему бы вместо этого не сделать замены простым скриптом? Например ..

#!/usr/bin/env ruby
f = File.new("f1.txt", File::RDWR)
contents = f.read()

contents.gsub!(/\d+/){|m|
  m.to_i + 1 # convert the current match to an integer, and add one
}

f.truncate(0) # empty the existing file
f.seek(0) # seek to the start of the file, before writing again
f.write(contents) # write modified file
f.close()

.. и вывод:

$ cat f1.txt
This was one: 1
This two two: 2
$ ruby replacer.rb
$ cat f1.txt
This was one: 2
This two two: 3

В ответ на комментарий Йеруна,

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

Регулярное выражение - это на самом деле простой синтаксис сопоставления с образцом. Делать что-либо более сложное, чем поиск / замена на совпадения, будет зависеть от текстовых редакторов, но полезность этого весьма ограничена и может быть достигнута с помощью сценариев, которые позволяют большинство редакторов ( Notepad ++ имеет плагин система, хотя я понятия не имею, как легко использовать).

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

3 голосов
/ 14 марта 2009

Возможно ли это в notepad ++ с использованием своего рода выражения в замещающей части?

Интерполированная оценка совпадений регулярных выражений - это относительно продвинутая функция, которую я, вероятно, не ожидал бы найти в приложении для редактирования текста общего назначения. Я немного поигрался с Notepad ++, но не смог заставить его работать, и я не смог найти в документации ничего, что бы предполагало, что это возможно.

2 голосов
/ 14 марта 2009

Хммм ... Я бы порекомендовал AWK сделать это.

http://en.wikipedia.org/wiki/AWK

1 голос
/ 03 апреля 2009

notepad ++ имеет ограниченные встроенные регулярные выражения. Существуют расширения, которые добавляют немного больше к поиску и замене регулярных выражений, но я нашел их сложными в использовании. Я бы порекомендовал написать небольшую внешнюю программу, чтобы сделать это для вас. Либо Ruby, Perl или Python были бы хороши для этого. Если вы знаете эти языки. Я использую Ruby и добился большого успеха с ним.

...