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\3

    For instance, the text :

    john:abC232
    smith:SnLf1999
    

    is 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 2 exists, that is to say if an upper case letter has matched

        • In upper case if group 2 does not exist => a lower case letter has matched

      • \1 is the first letter whose case has been modified

      • Finally, \L\3 rewrites 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 the Replace button

    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 \L confused 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)\1

    Cheers,

    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:SnLf1999
    

    becomes :

    john:AbC232
    smith:snLf1999
    

    BR,

    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)$0 syntax ( 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.
    like

    abc: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)\1

    For instance, the input text, below :

    john:abC232
    john:13kkmsd
    smith:SnLf1999
    

    would be modified as :

    john:AbC232
    smith:snLf1999
    

    Best regards,

    guy038


Log in to reply