convert lower to upper and upper to lower aftert colon
-
FYI:
The official docs have a section on substitution regex, but the conditional replacements were not explained: https://npp-user-manual.org/docs/searching/#substitutions
The most recent update to the documentation github has more details on that; it will be in the next release to the doc website (whenever that occurs): https://github.com/notepad-plus-plus/npp-usermanual/blob/852b4ac8a2e667be027d3f7db0a04cfeb2d71eca/content/docs/searching.md#substitution-conditionals
-
@PeterJones said in convert lower to upper and upper to lower aftert colon:
If I am understanding the logic, you want colon-lowercase to become colon-uppercase, and colon-uppercase to become colon-lowercase, and everything after that to be made lowercase, right? If so, then I think this will work for you:
Thank you very much, i really do appropriate taking time to help me out.
the logic is i want colon-lowercase to become colon-uppercase, and colon-uppercase to become colon-lowercase but everything after that stay the same i don’t want change it. -
Hello @real_1bx and All,
You need to distinguish an uppercase letter from a lowercase letter !
So, I think that the following regex S/R should work !
SEARCH
(?-is):(([A-Z])|[a-z])(.+)REPLACE
:(?2\l:\u)\1\L\3For instance, the text :
john:abC232 smith:SnLf1999is changed into :
john:Abc232 smith:snlf1999
Notes :
-
First, the in-line modifiers
(?-is)means that :-
The search will be carried on, in a non-insensitive way (
-i) -
Any regex dot symbol matches a single standard character only ( and not line-break chars )
-
-
Groups involved in the search regex are :
-
Group
1=([A-Z])|[a-z], so the first letter after the:char, which may be, either a lower-case or an upper-case letter -
Group
2=[A-Z], so the first upper-case letter after the: -
Group
3=.+, so all the remaining characters of current line, after the:and a first letter
-
-
In the replacement regex :
-
:rewrites the colon, first -
Then, the
(?2\l:\u)syntax is a conditional structure which forces the next character to be written :-
In lower case if group
2exists, that is to say if an upper case letter has matched -
In upper case if group
2does not exist => a lower case letter has matched
-
-
\1is the first letter whose case has been modified -
Finally,
\L\3rewrites all the remaining characters, of current line, in lower-case
-
-
Note that I do not use the look-behind structure
(?<=:)which enable us to use the step by step replacement with repeated hits on theReplacebutton
Best Regards,
guy038
@peterjones said :
I am surprised @guy038 hadn’t chimed in already, since he was around a few minutes ago.
Well, I was chatting for a moment with my son who’s going back to Lyon ;-)
-
-
@real_1bx said in convert lower to upper and upper to lower aftert colon:
Thank you very much, i really do appropriate taking time to help me out.
the logic is i want colon-lowercase to become colon-uppercase, and colon-uppercase to become colon-lowercase but everything after that stay the same i don’t want change it.Ahh, your
\Lconfused me to thinking you wanted the rest lowercase.Just get rid of the third group in find and replace should do it:
FIND =
(?-is)(?<=:)(?:([a-z])|([A-Z]))
REPLACE =(?1\u$1)(?2\l$2)
MODE = regular expression -
Hi, @real_1bx, @peterjones and All,
So, I did the same mistake as Peter !
Thus, my regex S/R should be modified as :
SEARCH
(?-i):(([A-Z])|[a-z])REPLACE
:(?2\l:\u)\1Cheers,
guy038
-
@real_1bx, @peterjones and All,
Last news : we don’t even need an outer group to capture the letter ! So, why not this attempt :
SEARCH
(?-i)(:[A-Z])|:[a-z]REPLACE
(?1\L:\U)$0
So the following text :
john:abC232 smith:SnLf1999becomes :
john:AbC232 smith:snLf1999BR,
guy038
-
@guy038
Thank you very much , that’s saved me a LOT of time. -
Hello @real_1bx,
I hope that you noticed why I use, this time, the
(?1\L:\U)$0syntax ( and not(?1\l:\u)$0), in replacement ?Just because the string to convert in upper / lower case (
$0) is two chars long ( a colon:+ a letter ) !BR
guy038
-
@guy038 is it possible to delete whole line if there is number after the :
i mean the first character after colon not the whole word.
likeabc:fkls john:13kkmsd smith:kmskl ``` **to be** ``` abc:fkls smith:kmskl ``` -
Hi, @real_1bx, and All,
This time, due to the simultaneous search of an entire line, with its line-break, when a digit follows the colon char, we need, again, two groups, leading up to that regex S/R :
SEARCH
(?-is)^.+:\d.+\R|((:[A-Z])|:[a-z])REPLACE
?1(?2\L:\U)\1For instance, the input text, below :
john:abC232 john:13kkmsd smith:SnLf1999would be modified as :
john:AbC232 smith:snLf1999Best regards,
guy038
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