RegEx Help with Backreference I think
-
@guy038 said in RegEx Help with Backreference I think:
I am struggling with trying to accomplish what I think is required.
FIND BookName and isolate into a Group
Indicate the text to be acted on
Input required change, the goal
Put the change into the REPLACE fieldI think that is it, but fitting it into a lookahead RegEx is still eluding me.
I will continue to work on it, but I have been for hours, and any guidance would be great.
-
I think that the most simple solution is to verify that, throughout your file, any “space” character, after the verse number, is ALWAYS a tabulation char !
So, given your ssimple INPUT text :
Kulava 1 Kulava 1:1 Halikumbi lyakavanga mukakweji wamuchivali, mumwaka wamuchivali kufuma haze valovokele mulifuchi lyaEjipitu, Yehova alwezele Mose mumakango aShinai muMbalaka yakuliwanyina ngwenyi, Kulava 1:2 Lavenu lizavu lyavana vaIsalele lyosena mwaya jitanga javo muvisaka vyavakakuluka javo mukuvula chamajina avo, malunga vosena umwe naumwe, Kulava 1:3 kufuma kuli ava vamyaka makumi avali (20) nakusambula, vosena vaze vakuhasa kulwa jita muli vaIsalele. Ove naAlone muvalave halizavu halizavu. Kulava 1:4 Kaha kutanga hitanga kufume lunga apwenga nayenu, kaha mutu himutu apwenga mwata wakutanga yavakakuluka jenyi. Kulava 1:5 Awa akiko majina amalunga navamikafwa — mutanga yaLuvene mufume Elizule mwanaSheteule. Kulava 1:6 Mutanga yaShimeyone mufume Shelumiyele mwanaZulishatai. Kulava 1:7 Mutanga yaYuta mufume Nashone mwanaAminatave. Kulava 1:8 Mutanga yaIsakale mufume Netanele mwanaZuwale. Kulava 1:9 Mutanga yaZevulune mufume Eliyave mwanaHelone. Kulava 1:10 Vamuli vana vaYosefwe navapwa ava — mutanga yaEfwalime mufume Elishama mwanaAmihute, mutanga yaManase mufume Ngamalyele mwanaPetazule.
The following regex S/R :
-
FIND
^(.+ \d+:\d+)[\x20\t]+
-
REPLACE
${1}\t
would return this OUTPUT text :
Kulava 1 Kulava 1:1 Halikumbi lyakavanga mukakweji wamuchivali, mumwaka wamuchivali kufuma haze valovokele mulifuchi lyaEjipitu, Yehova alwezele Mose mumakango aShinai muMbalaka yakuliwanyina ngwenyi, Kulava 1:2 Lavenu lizavu lyavana vaIsalele lyosena mwaya jitanga javo muvisaka vyavakakuluka javo mukuvula chamajina avo, malunga vosena umwe naumwe, Kulava 1:3 kufuma kuli ava vamyaka makumi avali (20) nakusambula, vosena vaze vakuhasa kulwa jita muli vaIsalele. Ove naAlone muvalave halizavu halizavu. Kulava 1:4 Kaha kutanga hitanga kufume lunga apwenga nayenu, kaha mutu himutu apwenga mwata wakutanga yavakakuluka jenyi. Kulava 1:5 Awa akiko majina amalunga navamikafwa — mutanga yaLuvene mufume Elizule mwanaSheteule. Kulava 1:6 Mutanga yaShimeyone mufume Shelumiyele mwanaZulishatai. Kulava 1:7 Mutanga yaYuta mufume Nashone mwanaAminatave. Kulava 1:8 Mutanga yaIsakale mufume Netanele mwanaZuwale. Kulava 1:9 Mutanga yaZevulune mufume Eliyave mwanaHelone. Kulava 1:10 Vamuli vana vaYosefwe navapwa ava — mutanga yaEfwalime mufume Elishama mwanaAmihute, mutanga yaManase mufume Ngamalyele mwanaPetazule.
You could suppose that using a look-behind, for the first part of the whole search regex, would work :
-
FIND
(?<=^.+ \d+:\d+)[\x20\t]+
-
REPLACE
\t
But, this construction is illegal as our
Boost
regex engine does not support look-behinds of VARIABLE length !
To get around this drawback, we may use the
\K
feature :-
First, the search regex matches any leading part
..... \d+:\d+
-
As soon as it meets the
\K
feature, the regex engine :-
Cancels any previous search, so far
-
Adjusts the engine regex position to the position of
\K
so, right after the verse number and before any mixed range of tabulations or space characters ([\x20\t]+
) -
Re-start the search of the final part
[\x20\t]+
-
And leads to the following regex S/R :
-
FIND
^.+ \d+:\d+\K[\x20\t]+
-
REPLACE
\t
IMPORTANT : If you’re using this second regex S/R with the
\K
feature, the replacement MUST be a global one, using theReplace All
button. You CANNOT use the step by step replacement with theReplace
button !Best regards,
guy038
-
-
@guy038 Thanx for your kind dedication and patience in helping me. I can now do in a couple of minutes what was taking days.
Starting again armed with the new MACROs is indeed a new beginning.
I wish you and Terry every blessings -
Hello, @robert-or-janet-diebel,
Regarding my last regex to normalize “space” characters to ONE tabulation char, only, I thought of a better regex S/R, which should speed up all the process as it skips all the correct lines containing just one tabulation character !
My very-Best-Novel 20:10 Mutanga yaYuta mufume Nashone mwanaAminatave. My very-Best-Novel 20:10 Mutanga yaYuta mufume Nashone mwanaAminatave. My very-Best-Novel 20:10 Mutanga yaYuta mufume Nashone mwanaAminatave. My very-Best-Novel 20:10 Mutanga yaYuta mufume Nashone mwanaAminatave. My very-Best-Novel 20:10 Mutanga yaYuta mufume Nashone mwanaAminatave.
-
FIND
^.+ \d+:\d+\K(?:[\x20\t]{2,}|\x20)
-
REPLACE
\t
-
Click on the
Replace All
button
The third line is skipped as it just contains
1
tab char and we get the OUTPUT text :My very-Best-Novel 20:10 Mutanga yaYuta mufume Nashone mwanaAminatave. My very-Best-Novel 20:10 Mutanga yaYuta mufume Nashone mwanaAminatave. My very-Best-Novel 20:10 Mutanga yaYuta mufume Nashone mwanaAminatave. My very-Best-Novel 20:10 Mutanga yaYuta mufume Nashone mwanaAminatave. My very-Best-Novel 20:10 Mutanga yaYuta mufume Nashone mwanaAminatave.
Note the use of a non-capturing group
(?:......)
as we do not need the contents of this group, either, in the search and/or the replace regex !Best Regards,
guy038
-
-
@guy038 Thank You very much for the extra effort.
-
@guy038 Still benefiting from you previous help.
Could you please give me some guidance with a problem in this RegEx?
“(?-is)\v (?=(?s:.+?^(\u[\u\l -]+ \d+$)))”
It is the second step in this MACRO.<?xml version="1.0" encoding="UTF-8" ?> <NotepadPlus> <InternalCommands /> <Macros> <Macro name="Trim Trailing Space and Save" Ctrl="no" Alt="yes" Shift="yes" Key="83"> <Action type="2" message="0" wParam="42024" lParam="0" sParam="" /> <Action type="2" message="0" wParam="41006" lParam="0" sParam="" /> </Macro> <Macro name="BookAndVerse" Ctrl="no" Alt="no" Shift="no" Key="0"> <Action type="2" message="0" wParam="42083" lParam="0" sParam="" /> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="(?-s)^\\c (\d+)(?=(.*\R)+?\\toc2 (.+)$)" /> <Action type="3" message="1625" wParam="0" lParam="2" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="${3} ${1}" /> <Action type="3" message="1702" wParam="0" lParam="512" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="(?-is)\\v (?=(?s:.+?^(\u[\u\l -]+ \d+$)))" /> <Action type="3" message="1625" wParam="0" lParam="2" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="${1}:" /> <Action type="3" message="1702" wParam="0" lParam="512" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <Action type="2" message="0" wParam="42083" lParam="0" sParam="" /> </Macro> </Macros> <UserDefinedCommands> <Command name="Get PHP help" Ctrl="no" Alt="yes" Shift="no" Key="112">https://www.php.net/$(CURRENT_WORD)</Command> <Command name="Wikipedia Search" Ctrl="no" Alt="yes" Shift="no" Key="114">https://en.wikipedia.org/wiki/Special:Search?search=$(CURRENT_WORD)</Command> <Command name="Open selected file path in new instance" Ctrl="no" Alt="yes" Shift="no" Key="117">$(NPP_FULL_FILE_PATH) $(CURRENT_WORD) -nosession -multiInst</Command> </UserDefinedCommands> <PluginCommands /> <ScintillaKeys /> </NotepadPlus>
Here is the test file.
\id 1SA PDP 2013 \h 1 SAMWELE \toc1 Mukanda waSamwele wakavanga \toc2 1 Samwele \toc3 1 Samw \mt2 MUKANDA WA \mt1 SAMWELE WAKAVANGA \imt Kujimbula mukanda \is Ásonekele mukanda \ip Ou mukanda vauvulukila vatu vatatu ngwavo vakiko vausonekele — kapolofweto Samwele, nakapolofweto Natane, nakapolofweto Ngate. Tala 1 Mijimbu 29:29. \is Mwaka wakuusoneka \ip Mwaka vasonekele ou mukanda wapwile mukachi kamyaka yakuputukila ha931 B.C. nakuheta ku722 B.C. shimbu kanda Yesu Kulishitu asemuke. \is Vihande vili mumukanda \ip Ou mukanda wapwa mujimbu wachikukulwishi chavihande vyaSamwele uze apwile wakukumishilako muli vaka-kuyula. Vavulukamo omu upilishitu waEli navana venyi, hamwe navaka-kuyula vazenekele kukavangiza mukwoloka chaKalunga, nomu vatu vakanyine muze Samwele asakile ngwenyi mulimo kana upwenga wakuswananga vana venyi kaha (1 Samwele 8:7). \ip Chipwe ngocho, Samwele ivene apwile kapolofweto wakushishika, kaha hali ikiye hakiko haputukilile vapolofweto vaze vasonekelenga vyaupolofweto. Kaha kufuma hali ikiye, hakiko hafumakanyinyine milimo yaupolofweto mulifuchi lyavana vaIsalele kuhambakana yaupilishitu. \ip Muno mumukanda mukiko vasolola omu chiyulo chaKalunga chakumine chize apwile nakuyulila muli vaka-kuyula (1 Samwele 8:7), nomu wangana waputukilile hali Saulu. \is Vihanda viwana vili mumukanda \ip Vihanda viwana vyauno mukanda: \ili1 Chihande chaSamwele nakuheta kukufwa chaEli, 1:1—4:22. \ili1 Kufuma hakumbata Chikasha chaUnjiho nakuheta kukufwila kupwa namwangana, 5:1—8:22. \ili1 Chiyulo chaSaulu nakuheta kukusanyika chaNdavichi, 9:1—15:35. \ili1 Kufuma kukusanyika chaNdavichi nakuheta kukufwa chaSaulu, 16:1—31:13. \ib \ip Mijimbu yosena yamuMUKANDA WASAMWELE WAKAVANGA yasolokele hatando yamyaka likulukaji nalikumi nayitanu (115), kutesa nakulava chaJames Usher\f + \fr 1:0 \ft James Usher apwile muka-kufwelela alihanyine kumulimo wakutala myaka vyasolokele vyuma kuMukanda waKalunga.\f*. \c 1 \s Kusemuka chaSamwele \p \v 1 Jino kwapwile lunga umwe wa\add mulimbo-lyakembwe\add* lya\png Lamataime-zofwime\png*, \add mungalila\add* yajipili ja\png Efwalime\png*, lijina lyenyi Elekana, mwanaYelohame, \add Yelohame\add* mwanaElihu, \add Elihu\add* mwanaTohu, \add Tohu\add* mwanaZufu wakutanga yaEfwalime\f + \fr 1:1 \ft Mumikanda yimwe ngwavo, Efwalata.\f*. \m \v 2 Apwile namapwevo vavali. Umwe lijina lyenyi Hana, kaha mukwavo lijina lyenyi Penina. Penina apwile navana, oloze Hana kapwile navanako. \p \v 3 Kaha \x + \xo 1:3 \xt Kulo 34:23\x*hamwaka hamwaka, ou lunga akandukilenga kufuma kwimbo lyenyi nakuya ku\add limbo-lyakembwe\add* \x + \xo 1:3 \xt Yosh 18:1 \x*lya\png Shilo\png* nakulifukula kuli \nd Yehova wamayongomena\nd*\f + \fr 1:3 \ft Yehova wamayongomena, likiko lijina lyaKalunga. Lyasolola omu apwa Mwenya vyosena, Muka-kuyula kwosena kwosena, Ukwechi ngolo josena, Ikiye nawa Muka-kuyula mayongomena avaka-jita mwilu.\f*, nakumuvatwila vimuna. Kaha vana vaEli vamalunga vavali, vaHofwinyi naFwinehase, vapwile vapilishitu ja\nd Yehova\nd* kuze. \m \v 4 Jino omu lyahetelenga likumbi ávatwilenga Elekana chimuna, \x + \xo 1:4 \xt Kuhi 12:17, 18\x*ahanyinenga pwevo lyenyi Penina navana venyi vamalunga naava vamapwevo vosena, \add mutu himutu\add* chazano chenyi \add chanyama yakulya kufuma kuli uze chimuna wakuvatula\add* — \m \v 5 oloze ahanyinenga Hana vyazano vivali mwomwo amuzangile, chipwe tuhu Yehova ajikile lusemo lwenyi. \m \v 6 Chipwe ngocho, \add Hana\add* vamusowangijilenga lika kuli muhalika wenyi nakumusangumuna, hakumona \nd Yehova\nd* ajikile lusemo lwenyi. \m \v 7 Jino omu \add Elekana\add* alingilenga ngocho hamwaka hamwaka, na\add Hana\add* nawa akandukilenga kuZuvo ya\nd Yehova\nd*, kaha muhalika wenyi amusowangijilenga lika. Shikaho \add Hana\add* alililenga nakulitwaminanga kulya. \m \v 8 Kaha lunga lyenyi Elekana amuhulishile ngwenyi, Ove Hana, mwomwo ika uli nakulila? Mwomwo ika uli nakukanyina kulya? Mwomwo ika uli nakulinyengela? Kumana kuli ove kangwahambakana vana vamalunga likumiko (10) tahi? \p \v 9 Shikaho omu vakumishile kulya nakunwa kuze ku\png Shilo\png*, Hana akatukile \add ayenga nakulomba\add*. Jino kapilishitu Eli apwile kuchipamba chachikolo chaTembele ya\nd Yehova\nd*, natwame hachitwamo. \m \v 10 Hana apwile nakulyonyinga mumuchima, kaha alombele kuli \nd Yehova\nd* nakulila chikuma. \m \c 2 \s Mwaso waHana \p \v 1 Jino Hana \x + \xo 2:1\xt 2:1-10; Luka 1:46-55\x*alifukwile ngwenyi, \q1 Muchima wami uli nakulisambila muli \nd Yehova\nd*, \q2 \x + \xo 2:1\xt Kuhi 33:17; Yopa 16:15; Samu 89:17\x*\add Ngolo jami vanajivulisa\add* kuli \nd Yehova\nd* nge lumbinga lwakuzezuka\f + \fr 2:1 \ft Lumbinga lwakanyama lwasolola ngolo jenyi.\f*, \q1 Kanwa kami kali nakupayisa vaka-kole jami, \q2 Mwomwo \x + \xo 2:1\xt Isa 12:2, 3\x*nguli nakuwahilila muulwilo wove. \q1 \v 2 Kakwatwama weka \nd Ajila\nd* nge \nd Yehova\nd*ko, \q2 Mwomwo \add Kalunga\add* weka wauchi, kuvanga Ove kaha, \q3 Kaha kakwatwama \x + \xo 2:2\xt Kuhi 32:30, 31\x*\nd Lilolwa lyakukola\nd* \add twázamina\add* nge Kalunga ketuko. \q1 \v 3 Kanda namuhanjika cheka nakatangalajiko, \q2 Mutunwa twenu kanda namulovoka kulisasa chachipiko, \q1 Mwomwo \nd Yehova\nd* apwa Kalunga \x + \xo 2:3\xt 16:7; 1 Vamy 8:39\x*wachinyingi, \q2 Kaha Ikiye apwa \x + \xo 2:3\xt Vish 16:2; 24:12\x*\nd Muka-kupezalisa\nd* vilinga. \q1 \v 4 Mata amanana avindume anahokoka, \q2 Oloze vakutalyangila \x + \xo 2:4\xt Hepe 11:32-34 \x*vanalijichika ngolo. \q1 \v 5 Vaze vekuchile vanalite kuungamba mangana vawanyineko vyakulya, \q2 Oloze vaze vapwile nazala kaveshi nakwivwa zalako jino. \q1 Mumba naseme vatanu navavali, \q2 Kaha ou ali navana vavavulu nazeye. \q1 \v 6 \nd Yehova\nd* eji \x + \xo 2:6\xt Kuhi 32:39; Kuso 1:18\x*kujihanga, kaha eji kuyoyesanga, \q2 Eji kushikumwisanga ku\pn Sheyole\pn*\f + \fr 2:6\ft Nge ngwenyi, kwaya vafu.\f*, kaha eji kukandwisanga. \q1 \v 7 \nd Yehova\nd* eji kuhutwisanga, kaha eji kuhananga luheto, \q2 Eji kwinyisanga, kaha eji kuzezulanga nawa, \q1 \v 8 Eji kukatulanga vaka-kuhutwa nakuvafumisa mulukungu, \q2 Eji kuzezulanga vaka-kukalikiza nakuvafumisa kuchishita, \q1 Nakuvatwamisa hamwe navilolo vavalemu, \q2 Mangana vaswane litanda lyaupahu. \q1 Mwomwo \x + \xo 2:8 \xt Yopa 38:4-6; Samu 24:2; 102:25; 104:5\x*jipanda jakwata mavu japwa ja\nd Yehova\nd*, \q2 Kaha hajikiko azamishila kaye. \q1 \v 9 \x + \xo 2:9\xt Samu 91:11, 12; 1 Pet 1:5\x*Mwalamanga muze vatambuka\f + \fr 2:9 \ft MuchiHepeleu ngwavo, vilyachilo.\f* vaka-kujila jenyi, \q2 Oloze tuvihu navakavaholesa mumilima, \q1 Mwomwo mutu hakupwa nangolo, \q2 Keshi hakiko mwahasa kufungulwilako. \q1 \v 10 Weshowo mwalipika na\nd Yehova\nd* \x + \xo 2:10\xt Kulo 15:6; Samu 2:9\x*navamuhokwojola.
The MACRO works when the name in \toc2 is just a word
When it starts with a number as in “\toc2 1 Samwele” it fails
It needs to allow for the possible presence of a number (1, 2, or 3).
But it is usually just a word.Could I get some guidance with this please?
-
Hello, @robert-or-janet-diebel,
Well, I’m terribly sorry because, given your INPUT text provided in your last post, the two search regexes, of your
BookAndVerse
macro, below, do not get any match ??-
FIND
(?-s)^\\c (\d+)(?=(.*\R)+?\\toc2 (.+)$)
-
FIND
(?-is)\\v (?=(?s:.+?^(\u[\u\l -]+ \d+$)))
Did you provide the right INPUT text to test against ?
BR
guy038
-
-
@guy038 Thanx for responding.
If I run the MACRO to change \c & \v with a number and a word (\toc2 1 Samwele) it fails.
If I remove the number (\toc2 Samwele) it works. The number and {space} cause failure.
Could the RegEx be altered to allow the number and {space}? -
This post is deleted! -
@guy038 The MACRO reverses line order.
I can maybe get the changes done with a number of simpler RegEx’s run after the fact, but I would prefer it totally automated if possible.
Another alternative is to separate the Numbered books and have a separate RegEx to run against them that would allow a number and {space} -
Hi , @robert-or-janet-diebel,
Oh… How silly I am ! You’re perfectly right. At first sight, I do not remark this important line, beginning your
BookAndVerse
macro :<Action type="2" message="0" wParam="42083" lParam="0" sParam="" />
So, instead of using the
^\u[\u\l -]+
part, for the name, we can use, either, the regexes :^\w[\w'’ -]+
or
^[[:alnum:]][[:alnum:]'’ -]+
IF no LOW LINE character (\x{005F}
) occurs in the name
Within these two regexes, I also added the two apostrophe syntaxes
['’]
. If you do not need them, don’t add them in the character class !So, given this example, below :
My very-Best-Novel 1 Samwele 5 L'été de tous les dangers 5 L’été de tous les dangers 1_ te_ST
-
The first regex
^\w[\w'’ -]+
would match the five lines above -
The second regex
^[[:alnum:]][[:alnum:]'’ -]+
would match the first four lines, only
Thus, If we take the general case, you must change, in your Step 2, the search regex as below :
- FIND
(?-is)\\v (?=(?s:.+?^(\w[\w'’ -]+ \d+$)))
Best Regards,
guy038
-
@guy038 I am so very thankful for your help.
Sorry I forgot to point out the line order reversal.
I will give it a try!
All the best to you and yours. -
@guy038 That is working great! I am so thankful!
Dare I mention my last failing MACRO that should change the {space} after the Book-Chapter:verse to a TAB?
Same issue, it works if there is no number.
I will try to figure it out, but if you have any guidance, it would be appreciated.<Macro name="Space2Tab" Ctrl="no" Alt="no" Shift="no" Key="0"> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="^(\w+\s\d+:\d+)\s(.*)$" /> <Action type="3" message="1625" wParam="0" lParam="2" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="$1\t$2" /> <Action type="3" message="1702" wParam="0" lParam="512" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> </Macro>
-
@guy038 Got my space-to-tab working.
Thanx for all your help! -
@guy038 Spoke too soon. Got it to change numbered book, then failed on non-numbered.
I am still working on it. -
Hello, @robert-or-janet-diebel,
I suppose that the following regex S/R should work :
-
FIND
^([\w ]+\x20\d+:\d+)\x20
-
REPLACE
$1\t
Best Regards,
guy038
-
-
@guy038 This works on numbered, but not unnumbered.
Here is what I tried.^(\d+?\s?\w+\s\d+:\d+)\s(.*)$
It worked on numbered, but not unnumbered
I thought the “?” would make it optional. -
@guy038 Sorry, that does work. I somehow slipped in a space before the RegEx in the MACRO