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

      Hello

      I have a very large text and I want to make a change on the words that start with a capital letter like for example :

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

      Make it like this:

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

      Thank’s for the help

      1 Reply Last reply Reply Quote 0
      • Terry RT
        Terry R
        last edited by Terry R

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

        I want to make a change on the words that start with a capital letter

        This is fairly simple. Using regular expressions (regex) we have (using Replace function)
        Find What:(\u\w+)
        Replace With:Myname1 \1 Myname2

        As it’s a regular expression the search mode MUST be regular expression.

        As an explanation:
        \u means find an upper case character, so from A to Z.
        \w+ means find 1 (or more) word characters. Now as well as including the lower case a to z it also includes numbers and the underscore _. If you want to include ONLY a to z characters use \u\l+ in the Find What field instead.
        \1 refers to the group captured in the Find What field (inside the ( )).

        I suggest you start reading some of the regex documentation listed under the FAQ section of this forum. Get to know the basics of regex. It doesn’t take much to learn this basic expression. There are many edits you can do with only a limited/basic knowledge of regex.

        Terry

        PS I should add that the \w includes upper and lower case characters, numbers and underscore. The \l is ONLY lower case characters so it is slightly different. I did assume that any word starting with a capital would ONLY have the first letter capitalised so using \w isn’t a problem. Just bear that in mind.

        1 Reply Last reply Reply Quote 3
        • 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