Add a new name before and after names that start with a capital letter
-
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
-
@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 Myname2As it’s a regular expression the search mode MUST be regular expression.
As an explanation:
\umeans find an upper case character, so fromAtoZ.
\w+means find 1 (or more) word characters. Now as well as including the lower caseatozit also includes numbers and the underscore_. If you want to include ONLYatozcharacters use\u\l+in the Find What field instead.
\1refers 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
\wincludes upper and lower case characters, numbers and underscore. The\lis 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\wisn’t a problem. Just bear that in mind. -
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
-
@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

- with match case = find 4 matches:

- without match case, but with
(?-i)prefixing finds 4 matches:
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.) - without match case = finds 10 matches
-
Thank you Terry R and PeterJones for your support!
The codes are working well! -
Thanks again
-
@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
\uwhich 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? -
@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 matcha-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,\uis 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. -
Hello, @terry-r, @peterjones and all,
Surprising ! I’d never really noticed this particularity !
And, indeed, whatever the
Boostvalid 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
uppercaseorlowercaseletter, if you don’t tick theMatch caseoption AND don’t have any(?-i)modifier in regex !I also tried these forms
[@-\\[]and[\x40-\x5B], so one char beforeAtill one char afterZ. 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++
Boostlibrary is not built with fullUnicodesupport !
In conclusion, I would say that, whenever we need to distinguish the case of letters in regexes, either :
-
Tick the
Match caseoption, in dialogs -
Insert a
(?-i)modifier within the regex
For instance, the search of
1upper-case letter, at a time, inside theLatin Extended-AUnicode block above, works, as expected, with the regex(?-i)\uTo my mind, the Peter’s interpretation seems the most plausible !
Best Regards,
guy038
-
-
@guy038 said,
regex
(?-i)\uooh, 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… -
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
exactcase -
Any regex
\usyntax, inside this non-capturing group, matches oneupper-caseletter -
Any regex
\lsyntax, inside this non-capturing group, matches onelower-caseletter -
Any regex
[A-Z]syntax, inside this non-capturing group, matches one letter, betweenAandZ -
Any regex
[a-z]syntax, inside this non-capturing group, matches one letter, betweenaandz
And this, whatever a possible
imodifier, used, before, in the overall regex and/or whatever theMatch caseoption is ticked or not !BR
guy038
-
-
@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.