Допустим, я хочу иметь 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" />
regex
notepad++
sequential
Travyguy9
источник
источник
Ответы:
Не уверен в регулярном выражении, но есть способ сделать это в Notepad ++, хотя он не очень гибкий.
В приведенном вами примере, удерживайте
Alt
и выберите столбец чисел, который вы хотите изменить. Затем перейдите кEdit->Column Editor
и выберитеNumber to Insert
переключатель в появившемся окне. Затем укажите начальное число и приращение и нажмите ОК. Он должен выписать увеличенные числа.Примечание: это также работает с
Multi-editing
функцией (выбор нескольких мест с удержанием Ctrlклавиши нажатой).Однако это далеко не та гибкость, которую большинство людей сочло бы полезной. Notepad ++ великолепен, но если вам нужен действительно мощный редактор, который может с легкостью делать подобные вещи, я бы сказал, используйте Vim.
источник
Сегодня я искал ту же функцию, но не смог этого сделать в Notepad ++. Однако нам на помощь приходит TextPad. У меня это сработало.
В диалоговом окне замены TextPad включите регулярное выражение; тогда вы можете попробовать заменить
<row id="1"/>
по
<row id="\i"/>
Взгляните на эту ссылку для получения дополнительных замечательных функций замены TextPad - http://sublimetext.userecho.com/topic/106519-generate-a-sequence-of-numbers-increment-replace/
источник
У меня была такая же проблема с более чем 250 строками, и вот как я это сделал:
например :
<row id="1" /> <row id="1" /> <row id="1" /> <row id="1" /> <row id="1" />
вы помещаете курсор сразу после «1», и вы нажимаете
alt + shift
и начинаете спускаться со стрелкой вниз, пока не дойдете до нижней строки, теперь вы видите группу выборов, нажмите стереть, чтобы стереть цифру 1 в каждой строке одновременно, и перейдите кEdit -> Column Editor
и выберитеNumber to Insert
затем введите1
начальное числовое поле и1
увеличьте его на поле, отметьте нулевые числа и нажмитеok
Поздравляю, вы сделали это :)
источник
Поскольку реальных ответов ограничено, я поделюсь этим обходным путем. На самом деле простых случаев, таких как ваш пример, вы делаете это в обратном порядке ...
Из этого
Замените
\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 | " /> |
Это очевидный материал, но он может помочь кому-то, выполняющему разовый разовый взлом, сэкономить несколько нажатий клавиш.
источник
(.*)
на<row id="\1" />
в режиме регулярного выражения без. matches newline
даст вам 100% пути туда.http://docs.notepad-plus-plus.org/index.php/Inserting_Variable_Text
Notepad ++ оснащен редактором Edit -> Column «Alt + C», который может работать с прямоугольным выделением двумя разными способами: Coledit.png вставка фиксированного текста в каждую строку, включая и после текущей строки, в столбце вставки точка (также известная как каретка). Первоначально выделенный текст остается нетронутым. Как показано на рисунке, таким же образом можно вставить линейный ряд чисел. Необходимо указать начальное значение и приращение. Левое заполнение нулями - это вариант, и число может быть введено с основанием 2, 8, 10 или 16 - так будут отображаться вычисленные значения, причем заполнение основано на самом большом.
источник
Предложенные выше решения будут работать только в том случае, если данные выровнены.
См. Решение в ссылке с использованием подключаемого модуля PythonScript Notepad ++. Отлично работает!
stackoverflow Найти / заменить, но увеличить значение
источник
(Публикация на случай, если кому-то это пригодится).
Я искал решение проблемы немного более сложного, чем 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, если вы сохраните свои значения в файле input.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
. При этом данные не обязательно должны быть в столбцах.источник