is regex condition possible in replace-string
-
I convert genealogic indexes from archive-sites into a ged-file, so they can be imported in my genealogic program.
In the searchstring I have made a named expression called (?<CTNOTE>…). In some cases it is possible that the CTNOTE expression is an empty string.
So I want to insert the lines 2 NOTE @N01@ and 0 @N10@ NOTE $+{CTNOTE} in the replaced result text only when the CTNOTE expression is not empty. Is it possible to write an replace-regex that does this job and how is it written down?
-
Again, this is more a RegEx related question.
There are several websites dedicated to RegEx, just google for it. -
Hi, @jos-maas and All
Sorry, I didn’t understand, exactly, what string must replace your matched search, but here is the general description of the back-references and conditional replacements syntaxes, in the REPLACE part, when using named groups :
SEARCH
(?-s)(?<jos>^\d+$)|.+
REPLACE
(?{jos}Rewrite $+{jos}, as Group 'jos' exists:Group 'jos' does NOT exist !)
With the reges S/R, above, the text :
123 This is a test 4567890
would be changed into :
Rewrite 123, as Group 'jos' exists Group 'jos' does NOT exist ! Rewrite 4567890, as Group 'jos' exists
Notes :
-
As usual, the
(?-s)
part is added to be sure that the dot symbol will match standard characters, only ! -
Then we’re searching, either :
-
A single integer number, per line, stored as group jos
(?<jos>^\d+$)
( It’s the priority search, as the first branch of the alternative ) -
All NON-empty contents of current line
.+
-
-
In replacement, we use the conditional replacement
(?{jos}++++++++:--------)
, which means :-
If the group jos exists, we rewrite the ++++++++ text ( part before the colon symbol )
-
If the group jos does not exist, we rewrite the -------- text ( part after the colon symbol )
-
So :
-
If a line contains a single number, the group jos exists and we re-write
Rewrite $+{jos}, as Group 'jos' exists
, with$+{jos
, being a back-reference to the named group jos -
ELSE the group jos does not exist and we, simply, rewrite the literal text, located after the colon symbol
Group 'jos' does NOT exist !
I do hope that this simple example will help you to solve your problem, easily !
Cheers,
guy038
-
-
Bonjour, Guy038,
Your help was to the point, as showed by snippets from the search and replace string hereafter.
In the searchstring: (Opmerking\R+(?<CTOPM>[A-z ]*$)\R+) - there is no need to have an alternation operator and string, because there is a match if “Opmerking\R” is in the tekst and the CTOPM-named substring is not empty, or not.
The replacestrings: (?{CTOPM}2 NOTE @N10@\r\n:) and (?{CTOPM}0 @N10@ NOTE $+{CTOPM}\r\n:) generate the wanted lines if there is a match, or do nothing if there is no match.
This item and that in my previous post illustrate the problem that I have as a newby in regex matters. As I know from my studies - some fifty years ago - you need basic theory, advanced theory and applied theory books to learn a job. I feel there is a lack specific for the regex in notepad++. The tutorial could be seen as an applied handbook, your “SYNTAXE des expressions RÉGULIÈRES PRCE, de NOTEPAD++ v6.0 et PLUS” is perhaps advanced theory, but - as far as I can see - both don’t give a complete overview of all aspects of the regex in notepad++. So far your replies on my posts provide the needed information in addition.
I am grateful for your help on both my posts and I surely will write a call for help when I encounter a new problem.
Cordialement, Jos
-
Hi, @jos-maas,
Oh yes ! You’re perfectly right. Even, in the example, described in my previous post, we don’t need any alternative !
But, in that case, when a line does not match ( NO group jos ), this line stays unchanged, and we do not need, either, the ELSE part of the conditional replacement !
So, the previous regex S/R, becomes :
SEARCH
(?-s)(?<jos>^\d+$)
REPLACE
?{jos}Rewrite $+{jos}, as Group 'jos' exists
And, with the original text :
123 This is a test 4567890
We would get, this time, the text :
Rewrite 123, as Group 'jos' exists This is a test Rewrite 4567890, as Group 'jos' exists
Note that, in replacement, the outer parentheses are removed, without any problem !
Jos, for further information, about regular expressions concept and syntax, begin with that article, in N++ Wiki :
http://docs.notepad-plus-plus.org/index.php/Regular_Expressions
In addition, you’ll find good documentation, about the Boost C++ Regex library, v1.55.0 ( similar to the PERL Regular Common Expressions, v1.48.0 ), used by
Notepad++
, since its6.0
version, at the TWO addresses below :http://www.boost.org/doc/libs/1_48_0/libs/regex/doc/html/boost_regex/syntax/perl_syntax.html
http://www.boost.org/doc/libs/1_48_0/libs/regex/doc/html/boost_regex/format/boost_format_syntax.html
-
The FIRST link explains the syntax, of regular expressions, in the SEARCH part
-
The SECOND link explains the syntax, of regular expressions, in the REPLACEMENT part
You may, also, look for valuable informations, on the sites, below :
http://www.regular-expressions.info ( The reference !! )
http://perldoc.perl.org/perlre.html
Be aware that, as any documentation, it may contain some errors ! Anyway, if you detected one, that’s good news : you’re improving ;-)
Cheers,
guy038
-