Notepad++ постепенно заменить
допустим, я хочу иметь 10 строк данных, но я хочу, чтобы значение увеличивалось для каждой строки или части данных. Как увеличить это значение?
например....Если у меня есть эти строки,Есть ли способ регулярного выражения для замены значений id для увеличения?
<row id="1" />
<row id="1" />
<row id="1" />
<row id="1" />
<row id="1" />
- - - вот как я хотел бы, чтобы это выглядело... (если идентификатор первой строки идет вверх, это нормально)
<row id="1" />
<row id="2" />
<row id="3" />
<row id="4" />
<row id="5" />
8 ответов
не уверен в регулярном выражении, но есть способ сделать это в Notepad++, хотя он не очень гибкий.
в Примере, который вы дали, удерживая Alt
и выберите столбец из чисел, которые вы хотите изменить. Тогда иди в Edit->Column Editor
и выберите Number to Insert
переключатель в появившемся окне. Затем укажите начальное число и приращение и нажмите OK. Он должен записать увеличенные числа.
Примечание: это также работает с Multi-editing
функция (выбор нескольких местоположений при сохранении Ctrl нажата).
это, однако, далеко не та гибкость, которую большинство людей сочли бы полезной. Notepad++ - это здорово, но если вам нужен действительно мощный редактор, который может легко делать такие вещи, я бы сказал, используйте Vim.
Я искал ту же функцию сегодня, но не мог сделать это в Notepad++. Тем не менее, у нас есть TextPad для нашего спасения. У меня получилось.
в диалоговом окне замены TextPad включите регулярное выражение; затем вы можете попробовать заменить
<row id="1"/>
by
<row id="\i"/>
посмотрите на эту ссылку для дальнейшей удивительной замены функций TextPad - http://sublimetext.userecho.com/topic/106519-generate-a-sequence-of-numbers-increment-replace/
поскольку есть ограниченные Реальные ответы, я поделюсь этим обходным путем. Для действительно простые случаи, такие как ваш пример, вы делаете это назад...
отсюда
1
2
3
4
5
заменить \r\n
С " />\r\n<row id="
и вы получите 90% пути там
1" />
<row id="2" />
<row id="3" />
<row id="4" />
<row id="5
или подобным способом вы можете взломать данные с Excel/таблица. Просто разделите исходные данные на столбцы и манипулируйте значениями по мере необходимости.
| <row id=" | 1 | " /> |
| <row id=" | 1 | " /> |
| <row id=" | 1 | " /> |
| <row id=" | 1 | " /> |
| <row id=" | 1 | " /> |
очевидные вещи но это может помочь кому-то сделать нечетную одноразовую работу Хака, чтобы сохранить несколько ключевых штрихов.
решения, предложенные выше, будут работать только при выравнивании данных..
см. решение в ссылке с помощью плагина PythonScript Notepad++, он отлично работает!
у меня была такая же проблема с более чем 250 линий, а вот как я сделал это:
например :
<row id="1" />
<row id="1" />
<row id="1" />
<row id="1" />
<row id="1" />
вы ставите курсор сразу после "1" и нажимаете на alt + shift
и начать спускаться со стрелкой вниз, пока не достигнете нижней строки Теперь вы видите группу выборов нажмите на стереть, чтобы стереть номер 1 на каждой строке одновременно и перейти к Edit -> Column Editor
и выберите поставить 1
в поле начальный номер и 1
в увеличивается на поле и проверьте нулевые номера и нажмите ok
Поздравляю, что вы это сделали:)
http://docs.notepad-plus-plus.org/index.php/Inserting_Variable_Text
Notepad++ оснащен редактором Edit -> Column "Alt+C", который может работать с прямоугольным выбором двумя различными способами: Coledit.формат PNG вставка некоторого фиксированного текста на каждую строку, включая и после текущей строки, в столбце точки вставки (он же каретка). Первоначально выделенный текст остается нетронутым. Как показано на рисунке, линейный ряд чисел может быть вставлен в точно так же. Необходимо указать начальное значение и приращение. Левый заполнитель с нулями является опцией, и число может быть введено в базу 2, 8, 10 или 16 - так будут отображаться вычисленные значения, заполнение на основе наибольшего.
(проводки в случае, если кто-то может использовать его).
Я искал решение проблемы немного более сложной, чем OP - замена каждого вхождения чего-то с номером на то же самое с увеличенным числом
например. Заменив что-то вроде этого:
<row id="1" />
<row id="2" />
<row id="1" />
<row id="3" />
<row id="1" />
это:
<row id="2" />
<row id="3" />
<row id="2" />
<row id="4" />
<row id="2" />
не удалось найти решение в интернете, поэтому я написал свой собственный скрипт в groovy (немного уродливый, но делает работу):
/**
* <p> Finds words that matches template and increases them by 1.
* '_' in word template represents number.
*
* <p> E.g. if template equals 'Row="_"', then:
* ALL Row=0 will be replaced by Row="1"
* All Row=1 will be replaced by Row="2"
* <p> Warning - your find template might not work properly if _ is the last character of it
* etc.
* <p> Requirments:
* - Original text does not contain tepmlate string
* - Only numbers in non-disrupted sequence are incremented and replaced
* (i.e. from example below, if Row=4 exists in original text, but Row=3 not, than Row=4 will NOT be
* replaced by Row=5)
*/
def replace_inc(String text, int startingIndex, String findTemplate) {
assert findTemplate.contains('_') : 'search template needs to contain "_" placeholder'
assert !(findTemplate.replaceFirst('_','').contains('_')) : 'only one "_" placeholder is allowed'
assert !text.contains('_____') : 'input text should not contain "______" (5 underscores)'
while (true) {
findString = findTemplate.replace("_",(startingIndex).toString())
if (!text.contains(findString)) break;
replaceString = findTemplate.replace("_", "_____"+(++startingIndex).toString())
text = text.replaceAll(findString, replaceString)
}
return text.replaceAll("_____","") // get rid of '_____' character
}
// input
findTemplate = 'Row="_"'
path = /C:\TEMP\working_copy.txt/
startingIndex = 0
// do stuff
f = new File(path)
outText = replace_inc(f.text,startingIndex,findTemplate)
println "Results \n: " + outText
f.withWriter { out -> out.println outText }
println "Results written to $f"
Вы можете сделать это с помощью Powershell через регулярное выражение и цикл foreach, если вы храните свои значения в файле вход.txt:
$initialNum=1; $increment=1; $tmp = Get-Content input.txt | foreach { $n = [regex]::match($_,'id="(\d+)"').groups[1
].value; if ($n) {$_ -replace "$n", ([int32]$initialNum+$increment); $increment=$increment+1;} else {$_}; }
после этого вы можете сохранить $tmp в файл с помощью $tmp > result.txt
. Для этого не нужны данные в Столбцах.