Community
    • Login

    Add a new name before and after names that start with a capital letter

    Scheduled Pinned Locked Moved Help wanted · · · – – – · · ·
    12 Posts 5 Posters 839 Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • El kohen AmalE
      El kohen Amal
      last edited by

      HI,

      I used the code you sent me, and I got the result on
      the following text:

      Myname1 several Myname2 Myname1 games Myname2 Myname1 like Myname2 Myname1 Sonic Myname2, Myname1 Mario Myname2, Myname1 Spiderman Myname2, Myname1 etc Myname2…
      Myname1 Games Myname2 Myname1 by Myname2 Myname1 excel Myname2!

      I wish that the change will be made only on words that contains at the beginning a capital letter like :

      several games like Myname1 Sonic Myname2, Myname1 Mario Myname2, Myname1 Spiderman Myname2, etc.
      Myname1 Games Myname2 by excel!

      Thanks again

      PeterJonesP Terry RT 2 Replies Last reply Reply Quote 0
      • PeterJonesP
        PeterJones @El kohen Amal
        last edited by PeterJones

        @El-kohen-Amal said in Add a new name before and after names that start with a capital letter:

        I wish that the change will be made only on words that contains at the beginning a capital letter

        That’s what @Terry-R’s regular expression will do… but only if you have “Match Case” enabled, or if you use (?-i) at the beginning of the regular expression:

        • without match case = finds 10 matches 6d7e57a5-724d-4138-be86-dbc75bdb64a1-image.png
        • with match case = find 4 matches: 2f199213-8c6e-4a36-bd5c-b6c05c2e41c2-image.png
        • without match case, but with (?-i) prefixing finds 4 matches: 692fa0d7-b289-4105-82b3-5c23d5fc72c4-image.png

        Thus, to ignore the status of the “match case” setting, I would recommend (?-i)(\u\w+) as the Find What search expression. (The replacement is the same as @Terry-R showed; I was just using the Find > Count to show number of matches quickly.)

        1 Reply Last reply Reply Quote 1
        • El kohen AmalE
          El kohen Amal
          last edited by

          Thank you Terry R and PeterJones for your support!
          The codes are working well!

          1 Reply Last reply Reply Quote 1
          • El kohen AmalE
            El kohen Amal
            last edited by

            Thanks again

            1 Reply Last reply Reply Quote 0
            • Terry RT
              Terry R @El kohen Amal
              last edited by

              @El-kohen-Amal said in Add a new name before and after names that start with a capital letter:

              I wish that the change will be made only on words that contains at the beginning a capital letter like :

              Apologies. I had been playing with both the “match case” button and (?-i) on and off as I was getting some conflicting results. When I finally presented my solution I must have had the match case button still ticked and didn’t realise.

              Thanks to @PeterJones for coming to the rescue.

              Terry

              Aside to @PeterJones and @guy038 This seems counterproductive if a meta character such as \u which should mean upper case ALSO needs the match case or (?-i) to make it work correctly. Am I missing an important concept or is this a known issue with the regex engine?

              PeterJonesP 1 Reply Last reply Reply Quote 1
              • PeterJonesP
                PeterJones @Terry R
                last edited by

                @Terry-R said in Add a new name before and after names that start with a capital letter:

                Am I missing an important concept or is this a known issue with the regex engine?

                My guess is it’s just a quirk of the regex engine. If you wrote [A-Z], you wouldn’t be surprised that case-insensitive match makes it also match a-z… but when you obscure it with \u, it might seem somehow different to an end-user, but to the developer of the engine, “uppercase is uppercase, whether it’s explicit or part of an escape”. Put another way, in my interpretation, \u is just a shorthand notation for something that really is effectively equivalent to [A-Z] (or its much larger Unicode equivalent) – but I don’t know whether the implementation makes it exactly equivalent to the described character set or not.

                1 Reply Last reply Reply Quote 3
                • guy038G
                  guy038
                  last edited by guy038

                  Hello, @terry-r, @peterjones and all,

                  Surprising ! I’d never really noticed this particularity !

                  And, indeed, whatever the Boost valid syntaxes, below :

                  [[:upper:]], [[:u:]], \p{upper}, \p{u}, \pu, \u, [A-Z], [\x41-\x5A], [\x{41}-\x{5A}] or [\x{0041}-\x{005A}]

                  they all select one uppercase or lowercase letter, if you don’t tick the Match case option AND don’t have any (?-i) modifier in regex !

                  I also tried these forms [@-\\[] and [\x40-\x5B], so one char before A till one char after Z. But, oddly, in that case, it just matches the @ and the [ characters !


                  Now, If you think about a consecutive range of characters, by code-point, you could suppose, at first sight, that the regex [A-Z] would match only upper-case letters, which is a non-discontiguous set of upper-case characters.

                  But, what about the Unicode block Latin Extended-A, for instance. It contains all these characters:

                  ĀāĂ㥹ĆćĈĉĊċČčĎďĐđĒēĔĕĖėĘęĚěĜĝĞğĠġĢģĤĥĦħĨĩĪīĬĭĮįİıIJijĴĵĶķĸĹĺĻļĽľĿŀŁłŃńŅņŇňʼnŊŋŌōŎŏŐőŒœŔŕŖŗŘřŚśŜŝŞşŠšŢţŤťŦŧŨũŪūŬŭŮůŰűŲųŴŵŶŷŸŹźŻżŽžſ

                  where, anyway, the upper-case and lower-case letters are mixed. So the search for a contiguous range of letters, with the same case, seems impossible, as our N++ Boost library is not built with full Unicode support !


                  In conclusion, I would say that, whenever we need to distinguish the case of letters in regexes, either :

                  • Tick the Match case option, in dialogs

                  • Insert a (?-i) modifier within the regex

                  For instance, the search of 1 upper-case letter, at a time, inside the Latin Extended-A Unicode block above, works, as expected, with the regex (?-i)\u

                  To my mind, the Peter’s interpretation seems the most plausible !

                  Best Regards,

                  guy038

                  PeterJonesP 1 Reply Last reply Reply Quote 3
                  • PeterJonesP
                    PeterJones @guy038
                    last edited by

                    @guy038 said,

                    regex (?-i)\u

                    ooh, as I looked at that juxtaposition this time, I realized: if we move the character escape sequence inside the option-parentheses, then @Terry-R can have the “must be this case, no matter what options are elsewhere” expressions: use (?-i:\u) for must-be-upper-no-matter-what and (?-i:\l) for must-be-lower-no-matter-what. It’s more to write, and we’ll forget that just as often as we forget to use (?-is) at the beginning of all our regex help, but…

                    Alan KilbornA 1 Reply Last reply Reply Quote 3
                    • guy038G
                      guy038
                      last edited by guy038

                      Hi, @terry-r, @peterjones and all,

                      Nice find Peter ;-)) Indeed, if we consider the contents of a non-capturing group (?-i:.............) :

                      • Any regex literal letter, inside this non-capturing group, matches the letter, itself, with its exact case

                      • Any regex \u syntax, inside this non-capturing group, matches one upper-case letter

                      • Any regex \l syntax, inside this non-capturing group, matches one lower-case letter

                      • Any regex [A-Z] syntax, inside this non-capturing group, matches one letter, between A and Z

                      • Any regex [a-z] syntax, inside this non-capturing group, matches one letter, between a and z

                      And this, whatever a possible i modifier, used, before, in the overall regex and/or whatever the Match case option is ticked or not !

                      BR

                      guy038

                      1 Reply Last reply Reply Quote 1
                      • Alan KilbornA
                        Alan Kilborn @PeterJones
                        last edited by

                        @PeterJones said in Add a new name before and after names that start with a capital letter:

                        use (?-is) at the beginning

                        My rule of thumb is becoming to type that, first thing after calling up the Find window, when I know I’m doing regex.

                        I can always modify it later, but it is a good starting point.
                        The discussion in this thread about case bears that out.

                        1 Reply Last reply Reply Quote 2
                        • First post
                          Last post
                        The Community of users of the Notepad++ text editor.
                        Powered by NodeBB | Contributors