Replace text with incremented counter
- 
 I ended up using TextPad it would be nice if Notepad ++ could also do this  
- 
 The best way to do it in Notepad++ is with the Pythonscript plugin. 
- 
 @Alan-Kilborn Hi Alan, Is there a good tutorial on how to add the plugin, I don’t know how to add it. 
- 
 best way, afaik, is to use the Plugins Admin from plugins menu I guess. 
- 
 BTW, it’s NOT an automatic thing. 
 Meaning that if you just install the plugin you’ll be able to do what you want in a nice way.
 Installing the plugin only means that you have scripting functionality (yay!).There are some examples of doing it with a script on this forum in previous posts. In the coming days I’ll put together a sample that makes it work like Textpad (on a ReplaceAll basis). At this point I’m thinking it won’t have an awesome UI but maybe @Ekopalypse has some techniques that could help out with that. 
- 
 There are some examples of doing it with a script on this forum in previous posts. Not to forget the help function in the python script console >>> help(editor.rereplace) Help on method rereplace: rereplace(...) method of Npp.Editor instance rereplace( (Editor)arg1, (object)searchRegex, (object)replace) -> None : Regular expression search and replace. Replaces 'searchRegex' with 'replace'. ^ and $ by default match the starts and end of the document. Use additional flags (re.MULTILINE) to treat ^ and $ per line. The 'replace' parameter can be a python function, that recieves an object similar to a re.Match object. So you can have a function like def myIncrement(m): return int(m.group(1)) + 1 And call rereplace('([0-9]+)', myIncrement) and it will increment all the integers. ...
- 
 There are some examples of doing it with a script on this forum in previous posts. Some previous history on this topic on the forums follows. 
 I’m sure there are others.
 Likely that some of these contain Pythonscripts:- https://community.notepad-plus-plus.org/topic/15318/replace-text-with-incremented-counter
- https://community.notepad-plus-plus.org/topic/16307/need-regex-for-incremental-by-1
- https://community.notepad-plus-plus.org/topic/16245/find-and-replace
- https://community.notepad-plus-plus.org/topic/12967/replace-string-across-multiple-files-and-increment-value
- https://community.notepad-plus-plus.org/topic/12301/replace-text-with-incremented-counter
 
- 
 @Ekopalypse Thanks for your input. I have limited experience with Python. In my use case, I am appending an incrementing counter at the start of every line that is preceded with a pair of carriage returns. This numbers each question in the Aiken file. see: http://rupert.id.au/aiken/ Kind regards, 
 Rupert.
- 
 Hi @Alan-Kilborn thanks that would be useful. I have installed Python script into Notepad ++ and I will a play with Something more like this, Thanks for the link. 
 https://community.notepad-plus-plus.org/topic/15318/replace-text-with-incremented-countercount = -1 def calculate(m): 
 global count
 count += 1
 return ‘<TAG>’ + str(count) + ‘<TAG>’editor.rereplace(‘<TAG>([0-9]+)<TAG>’, calculate); 
- 
 @Rupert-Russell said in Replace text with incremented counter: This numbers each question in the Aiken file. see: http://rupert.id.au/aiken/ Hi. As a test I decided to see what’s involved in doing this via a regular expression. As the others stated, it would be better using a scripting/programming language however that then involves additional learning, something that might not produce a result quickly. It is certainly possible (at least in my limited testing). Using the examples I gathered from your link I ran up 10 questions. Essentially the steps would be: - Have each question and multiple answers appear on 1 line, with the question first.
 2.Insert an incrementing number at the start of the line and if necessary move it to the correct position.
- Change the lines back to the original format with question first. The next few lines would be the multiple answers, followed by a blank line.
 Now although I have stated 3 steps, in fact each one has a few steps within, however the option is there should you wish to pursue that idea. Good luck 
 Terry
- Have each question and multiple answers appear on 1 line, with the question first.
- 
 Hello @rupert-russell, @alan-kilborn, @terry-r and All, Oh, I first thought, as many others, that this goal, needing calculations, was beyond the scope of regular expressions ! But, reading @terry-r’s post, I realized that, indeed, a regex solution is possible, in that specific case ;-)) And I already guessed how @terry-r would achieve it ! I, myself found out a solution, which uses, successively, a 1stregex S/R, then theColumn Editorfeature and, then, a2ndregex S/RLet’s wait a bit for the OP’s answer. Then, we could compare our solutions, ah ah ! Best Regards, guy038 
- 
 @Alan-Kilborn said in Replace text with incremented counter: In the coming days I’ll put together a sample that makes it work like Textpad (on a ReplaceAll basis). At this point I’m thinking it won’t have an awesome UI but maybe @Ekopalypse has some techniques that could help out with that. I saw some activity in this thread (someone upvoted some of my postings–nice–LOL), so I just thought I’d add a comment saying that I’m still working on the script I mentioned. 
 It has suffered from my usual problem: feature creep :-) :-(
 Stay tuned…
- 
 Hi, @rupert-russell, @alan-kilborn, @terry-r and All, OK, Alan, So here is my regex solution, ( already written ! ) Assuming that : - 
Each possible answer begins with an uppercase letter, immediately followed by a dotand aspacecharacters
- 
The correct letter is preceded by the string ANSWER, in uppercase, immediately followed by acolonand aspacecharacters
 Let’s start with this initial text data, below, where I, intentionally, added additional line-breaks, in a random order, and removed some others, in order to simulate ageneralformat :This a first test! A. This is B. a test C. to build D. the regex ANSWER: A This a second test! A. This is B. a test C. to build D. the regex ANSWER: B This a third test! A. This is B. a test C. to build D. the regex ANSWER: C- 
Run this first regex S/R : - 
SEARCH (?-i)\R+(?=\u\.\x20|ANSWER:)|(\R)+
- 
REPLACE ?1\1:\x20
 
- 
 You should obtain the following text, where all stuff of each test is moved in a single line : This a first test! A. This is B. a test C. to build D. the regex ANSWER: A This a second test! A. This is B. a test C. to build D. the regex ANSWER: B This a third test! A. This is B. a test C. to build D. the regex ANSWER: CNow, let’s suppose that we have a 12-lines list ( instead of3-lines ) :This a first test! A. This is B. a test C. to build D. the regex ANSWER: A This a second test! A. This is B. a test C. to build D. the regex ANSWER: B This a third test! A. This is B. a test C. to build D. the regex ANSWER: C This a fourth test! A. This is B. a test C. to build D. the regex ANSWER: D This a fifth test! A. This is B. a test C. to build D. the regex ANSWER: A This a sixth test! A. This is B. a test C. to build D. the regex ANSWER: B This a seventh test! A. This is B. a test C. to build D. the regex ANSWER: C This a eighth test! A. This is B. a test C. to build D. the regex ANSWER: D This a ninth test! A. This is B. a test C. to build D. the regex ANSWER: A This a tenth test! A. This is B. a test C. to build D. the regex ANSWER: B This a eleventh test! A. This is B. a test C. to build D. the regex ANSWER: C This a twelfth test! A. This is B. a test C. to build D. the regex ANSWER: D- 
Move the caret at the very beginning of the first line 
- 
Select the option Edit > Column Editor- 
Choose the Number to Insertmain option
- 
Type in the value 1in each field
- 
Do not tick the Leading zerosbox ( IMPORTANT )
- 
Verify that the format is Dec
- 
Click on the OKbutton
 
- 
 You’ll get : 1 This a first test! A. This is B. a test C. to build D. the regex ANSWER: A 2 This a second test! A. This is B. a test C. to build D. the regex ANSWER: B 3 This a third test! A. This is B. a test C. to build D. the regex ANSWER: C 4 This a fourth test! A. This is B. a test C. to build D. the regex ANSWER: D 5 This a fifth test! A. This is B. a test C. to build D. the regex ANSWER: A 6 This a sixth test! A. This is B. a test C. to build D. the regex ANSWER: B 7 This a seventh test! A. This is B. a test C. to build D. the regex ANSWER: C 8 This a eighth test! A. This is B. a test C. to build D. the regex ANSWER: D 9 This a ninth test! A. This is B. a test C. to build D. the regex ANSWER: A 10This a tenth test! A. This is B. a test C. to build D. the regex ANSWER: B 11This a eleventh test! A. This is B. a test C. to build D. the regex ANSWER: C 12This a twelfth test! A. This is B. a test C. to build D. the regex ANSWER: D 13- 
Get rid of the empty line 13, at end of this list, if you wish to
- 
Now, run this second and final regex S/R : - 
SEARCH ^\d+(\x20)?|\x20(\u\.\x20|ANSWER:)
- 
REPLACE \r\n?2\2:$0?1:\x20
 
- 
 Here is your expected numbered list of 12tests. Voila !1 This a first test A. This is B. a test C. to build D. the regex 2 This a second test A. This is B. a test C. to build D. the regex 3 This a third test A. This is B. a test C. to build D. the regex 4 This a fourth test A. This is B. a test C. to build D. the regex 5 This a fifth test A. This is B. a test C. to build D. the regex 6 This a sixth test A. This is B. a test C. to build D. the regex 7 This a seventh test A. This is B. a test C. to build D. the regex 8 This a eighth test A. This is B. a test C. to build D. the regex 9 This a nineth test A. This is B. a test C. to build D. the regex 10 This a tenth test A. This is B. a test C. to build D. the regex 11 This a eleventh test A. This is B. a test C. to build D. the regex 12 This a twelfth test A. This is B. a test C. to build D. the regexBest Regards, guy038 
- 
- 
 Hmmm, this may be a case of missing the forest while seeing the trees. The script will be a general-purpose solution which mostly follows the OP’s desire, meaning, at replace-time, a special syntax can be present in the replace string which will allow count-based replacement. Here’s the syntax that I’m thinking: foo \i(103,-4,'03') barThis would cause the first replacement to be foo 103 bar, the second replacement to befoo 099 bar, the third isfoo 096 bar, etc.I deviate a bit from what the OP exactly wanted, with an optional argument: Note that my 3rd argument to the \isyntax – which is'03'above, is a format specifier for Python’s string formatting routine. Thus for my specific example, it causes zero-padding to a field-width of three, as one can observe in my099and096output samples.Another example might be foo \i(103,-4,'#x') barand here are some successive replacements:foo 0x67 bar foo 0x63 bar foo 0x5f bar foo 0x5b bar…and so on… There doesn’t appear to be a great link to the Python format strings, but here’s one that will sort of lead there: https://docs.python.org/3.4/library/string.html#formatstrings By the way, @guy038, I use this regex in code to parse the \isyntax:\\i(?:\((-?\d+)(?:,(-?\d+))?(?:,'(?-s)(.*?)')?\))?. I thought you might enjoy seeing/knowing that. :-)
- 
 The python 2.7 version of it is at https://docs.python.org/2.7/library/string.html#format-string-syntax 



