Search++ (\W)'(\w) regex replace failure
-
I didn’t think to mention that quirk. If you start with a rectangular selection, Columns++ searches each row independently
Aha. That explains my own confusion. That was actually the first time I’d used the Search feature of Columns++. For the record, any time I’m doing regex search & replace in NPP that either turns out to be more complicated than I expected, or involves some trial and error, or which I’m going to want to utilize again elsewhere (such as this topic), I’m in the habit of typing it out right in the text document I’m working on, and then I select/copy the replacement regex, then select the find regex and open the necessary dialog, expecting the Find what to have been automatically populated from my most recent selection (which, of course, didn’t happen in that case). It didn’t occur to me that that wouldn’t work in Columns++. So, when I opened Columns++’s Search dialog with only the content of one line selected and tried to perform my regex search, it threw this at me:
This command requires a rectangular selection. Extend selection to the last line of the document?And, Columns++ Search neophyte that I am, I didn’t heed the suggestion. I closed the dialog and created a rectangular selection.
Now that I’ve been made aware of the error of my ways, I’ve redone the experiment with all the my example text selected, and all instances of
'were successfully replaced with’, without any anomalies. -
This command requires a rectangular selection. Extend selection to the last line of the document?And, Columns++ Search neophyte that I am, I didn’t heed the suggestion.
Had you heeded it, you would still have gotten a rectangular selection, as it says, extending downward from your selection — not necessarily enclosing the whole document, and in any case not the same as selecting the whole document (or selecting nothing at all) first.
I should re-word that message, I’m just not sure what to say instead. It’s not actually true (since version 0.8) that a rectangular selection is required; as I mentioned before, the rules are complicated. They won’t easily fit into a message box. It makes sense when you’re using Columns++ for working with columns, but the search kind of took on a life of its own, apart from column work… hence, among other reasons, Search++.
I’ve redone the experiment with all the my example text selected, and all instances of
'were successfully replaced with’, without any anomalies.Thank you for that information. I do appreciate the help you’ve given me with this. While it doesn’t prove anything (almost nothing is ever proven when dealing with an intermittent bug), it suggests pretty strongly that something I changed in moving the Columns++ search process to Search++ has introduced a hidden instability. I’m still looking for it.
-
On the outside chance that specifics of the variants of my regex replacement anomalies are useful, here is some detailed information about them and the circumstances of their appearance… I started with an unsaved ANSI text tab/buffer with:
Search++ Regex (\W)'(\w) \1’\2 this 'Cos I am that this 'Round and 'round that ------------------------------------------------------------------… and the example text (
this[CRLF]'Costo'round[CRLF]thatfollowed by[blank line]/[dashed line]/[blank line]) repeated 9 times below (total of 10 times). The anomalies occurred on the following lines during this first experiment:Line 27:
-’-os I amLines 51–52:
’Round and
’houndLines 62–63:
a’
ound and ’roundSecond experiment:
Line 11:
-’-ound and ’roundLine 27:
-’-os I amLine 57:
-’-os I amLines 87–88:
[blank line]
’tos I amThird experiment:
Line 10:
this-’-ound and ’roundLine 16:
-’-os I amLine 40:
-’-ound and ’roundLine 60:
’Round and-’-oundLine 90:
’Round and-’-ound -
here is some detailed information
Thank you. At this point I am still stumped as to how to find this needle in a haystack. Any information could turn out to be helpful. I appreciate your perseverance.
-
Have you ever noticed arbitrary junk character replacements with any other regular expression / replacement pairs, or only with this particular one?
-
Have you ever noticed arbitrary junk character replacements with any other regular expression / replacement pairs, or only with this particular one?
I haven’t actually tried any others with Search++, so far. The vast majority of my regex operations are accomplished via PythonScript, and I only very infrequently need to perform a standalone regex. But I’ll keep Search++ in mind if/when another one becomes necessary.
-
@M-Andre-Z-Eckenrode I may not fully understand the regex task with using groups when
'can be at the start of a line with a word character following as to\Wcan match the preceding LineFeed character. The LineFeed character seems unwise to capture in my opinion.\Wcan change behavior depending on encoding so might be challenging to use so perhaps if can be avoided, then that might be better.The find pattern of
\B'\band replace with’might be safer to use as to using anchors to qualify the match instead of consuming with groups which may need more complex conditional handling. -
Hello, @m-andre-z-eckenrode, @coises, @mpheath and All,
@mpheath, you said :
The find pattern of
\B'\band replace with’might be safer to use as to using anchors to qualify the match instead of consuming with groups which may need more complex conditional handling.I totally agree with this statement !
That is why I proposed, in my initial post, this alternate formulation :
FIND
(?<=\W)'(?=\w)REPLACE
’which do not contain any group !
Indeed, the
\B'\band(?<=\W)'(?=\w)Find regexes are equivalent and aReplace Alloperation would change this INPUT text, below :'t'e's't' 't'o' 's'e'e' 't'h'e' 'm'a't'c'h'e's'By this one :
’t'e's't' ’t'o' ’s'e'e' ’t'h'e' ’m'a't'c'h'e's'In other words, any single quote char, preceded by a non-word char and followed with a word char, is changed into the
’character (\x{2019}RIGHT SINGLE QUOTATION MARK )Best Regards,
guy038
-
Thanks much for the suggestions, though as stated in my other similar topic, which isn’t specific to Search++, I already found and used a working alternate method to achieve what I wanted, and only really started that topic to try to understand why the
(\W)'(\w)method did NOT work, while THIS topic is only really to report the aberrant replacements seemingly caused by Search++. -
For what it’s worth, I asked my brother, whom I know also uses Notepad++, to indulge me by repeating my Search++ regex experiments on his own computer, and he kindly did so after encountering some initial problems getting Search++ to work at all (see below for details of that). Anyway, he used a fresh portable copy with the latest versions of both, as I have, and reports getting one anomalous replacement while stepping through a text field made up of 11 copies of my recently reported example text. I think that duplicating the problem almost invariably requires many matches and replacement attempts, since it’s so hit or miss for whatever reason.
About my brother’s initial failures to get Search++ to load in his portable copy: His first four or so tries were attempted in different virtual machines on his computer, including the very first one being Windows 11’s built-in “Sandbox”. All of them failed with messages such as “The specified module could not be found” and “Search++.dll is not compatible with the current version of Notepad++”. But when he tried the same set of files on his real machine, it worked. He routinely runs various other programs in virtual machines just fine.
-
@M-Andre-Z-Eckenrode said:
For what it’s worth, I asked my brother, whom I know also uses Notepad++, to indulge me by repeating my Search++ regex experiments on his own computer, and he kindly did so after encountering some initial problems getting Search++ to work at all (see below for details of that). Anyway, he used a fresh portable copy with the latest versions of both, as I have, and reports getting one anomalous replacement while stepping through a text field made up of 11 copies of my recently reported example text. I think that duplicating the problem almost invariably requires many matches and replacement attempts, since it’s so hit or miss for whatever reason.Thank you, and thanks to your brother!
Is he also using 32-bit Notepad++?
About my brother’s initial failures to get Search++ to load in his portable copy: His first four or so tries were attempted in different virtual machines on his computer, including the very first one being Windows 11’s built-in “Sandbox”. All of them failed with messages such as “The specified module could not be found” and “Search++.dll is not compatible with the current version of Notepad++”. But when he tried the same set of files on his real machine, it worked. He routinely runs various other programs in virtual machines just fine.
I just tried the same thing in Windows 10 Sandbox on my system and it also failed, with the same message. I will have to investigate that. Off the top of my head, I don’t know why that would happen. My guess (that’s all it is for now) is there’s some sort of C++ runtime dependency that nearly everyone has installed on their main machines, but that doesn’t carry over automatically to a virtual machine or a sandbox.
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