Replace text with incremented counter
-
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
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login