Convert Case to ...
-
It’s great to have the Convert Case to capability. Can it be enhanced to include more options? For example, the TitleCase Addon for Mozilla Thunderbird has these options:
- tOGGLE cASE
- Proper case
- Title Case
- Title Case (CamelCase)
- Start Case
- Start Case (CamelCase)
- CamelCase
- UPPER CASE
- lower case
Thanks!
-
This would be an absolutely wonderful addition! I would do it myself if i knew how…
-
Install TextFX plugin, it’s one of the best plugins.
-
Hello Jeronymite and All,
UPDATED on 12/02/2016 ( addition of the syntax
(?-is)
, in front of each regex, to ensure that :-
The search is performed in a sensitive way
-
The dot meta-character matches standard characters, only
I did some investigations, on the Net, about the different Capitalization rules. Below, 3 links to interesting articles on that topic :
http://c2.com/cgi/wiki?CapitalizationRules
https://en.wikipedia.org/wiki/Letter_case
From that documentation, here is, below, a ( non exhaustive !) summary of the main kinds of capitalisation :
-
UPPERCASE / All-caps
THE MAPS AND A BOOK ARE IN MY BROWN FRENCH BAG. --> All letters are UPPERCASE -
Start Case / Proper Case
The Maps And A Book Are In My Brown French Bag. --> All words are Capitalized, regardless its category -
tOGGLE cASE
( from ABOVE ) tHE mAPS aND a bOOK aRE iN mY bROWN fRENCH bAG. --> INVERT the case of each letter -
Title Case
The Maps and a Book Are in My Brown French Bag. --> FIRST word Capitalized, and all other words, except for articles, prepositions and conjunctions -
Title Case
, Variant 1 The Maps and a Book are in My Brown French Bag. --> AsTitle Case
and excepting the forms of “to be” -
Title Case
, Variant 2 The Maps and a Book are in my Brown French Bag. --> AsTitle Case
but except for all closed-class words -
German Sentence Case
The Maps and a Book are in my brown French Bag. --> FIRST word and all NOUNS are Capitalized -
german mid Sentence Case
the Maps and a Book are in my brown French Bag. --> All NOUNS are Capitalized, except for the FIRST word -
Sentence case
The maps and a book are in my brown French bag. --> FIRST word, Proper nouns and some specific words ( as the pronoun I ) are Capitalized -
mid sentence case
the maps and a book are in my brown French bag. --> As above, but FIRST word is NOT Capitalized -
lowercase
the maps and a book are in my brown french bag. --> All letters are lowercase -
SCREAMING_SNAKE_CASE
THE_MAPS_AND_A_BOOK_ARE_IN_MY_BROWN_FRENCH_BAG_ --> All letters are UPPERCASE, and words separated by underscores -
snake_case
[T/t]he_maps_and_a_book_are_in_my_brown_french_bag_ --> All letters, from the second, lowercase, and words separated by underscores -
KEBAB-CASE
THE-MAPS-AND-A-BOOK-ARE-IN-MY-BROWN-FRENCH-BAG- --> All letters UPPERCASE, and words separated by hyphens -
Train-Case
The-Maps-And-A-Book-Are-In-My-Brown-French-Bag- --> All words are Capitalized and separated by hyphens -
kebab-case
[T/t]he-maps-and-a-book-are-in-my-brown-french-bag- --> All letters, from the second, lowercase, and words separated by hyphens -
PascalCase
TheMapsAndABookAreInMyBrownFrenchBag --> All words, with letters only, are Capitalized and run together -
[Upper]CamelCase / WikiCase
TheMapsAndBookAreInMyBrownFrenchBag --> AsPascalCase
, but each UPPERCASE letter must be followed by a lowercase letter ( So, initial ONE LETTER words are DELETED ) -
lowerCamelCase
theMapsAndBookAreInMyBrownFrenchBag --> AsWikiCase
, except the FIRST word is lowercase -
StUdLyCaPs
ThEmApSaNdAbOoKaReInMyBrOwNfReNcHbAg --> UPPER and lower letters alternated, beginning UPPERCASE -
StUdLyCaPs
, Variant 1 tHeMaPsAnDaBoOkArEiNmYbRoWnFrEnChBaG --> UPPER and lower letters alternated, beginning lowercase -
StUdLyCaPs
, Variant 2 thEmApsAndAbOOkArEInmYbrOwnfrEnchbAg --> VOWELS are UPPERCASE and CONSONANTS are lowercase -
CaNoNiCaLSTuDLyCaPS
THeMaPSaNDaBooKaReiNMyBRoWNFReNCHBaG --> VOWELS are lowercase and CONSONANTS are UPPERCASE ( used by the dyslexic ) -
MiXEdCapS
TheMApsANdabOokaREINmyBrOWnFrencHBAG The Case of the letters change almost RANDOMLY
Be aware that you may get some odd replacements, with some capitalizations. Just consider, these few examples, below, with the Proper Case capitalization rule :
- If word = McDonald , Proper Case --> Mcdonald
- If word = MacDonald, Proper Case --> Macdonald
- If word = Google’s, Proper Case --> Google’S
- If word = A FBI Inspector, Proper Case --> A Fbi Inspector
- If word = my.email@test.com, Proper Case --> My.Email@Test.Com
- If word = John Smith III, Proper Case --> John Smith Iii
From that list above, it’s obvious that we can’t build a search/replacement, with regular expressions, for the following capitalizations !
- Title Case, and its variants
- German Sentence Case and German mid Sentence Case
- Sentence case and mid Sentence case
- MiXEdCapS
Indeed, these capitalizations have a lot of exceptions or rules, that closely depends on grammar and spelling, completely unreachable with regex S/R !!!
For all the others kinds of capitalization, here is, below, a list of standard regex S/R that achieves the appropriate case modifications.
I included, in that list, a “light” version of the “Sentence case”, which :
-
can handle successive sentences, in one go
-
correctly write the pronoun I, in an UPPERCASE way
-
Unfortunately, replaces Proper nouns and some specific words (as names of the days, …), in a lowercase way :-((
About the following S/R, some hypotheses are supposed :
-
You must SELECT the area to apply a particular capitalization rule, FIRST
-
The Regular expression search mode is SET
-
The In selection option should be CHECKED, on opening the Replace dialog, because of the previous selection
For UPPER CASE : SEARCH =
(?-is).+
and REPLACE =\U$0
BEFORE Hi guys : o’nEil, and I, created A test. wHat DO you ThinK About IT? i QUITE like that mP3 Song! / ‘T_esT’ T-Est “aBc”.
AFTER HI GUYS : O’NEIL, AND I, CREATED A TEST. WHAT DO YOU THINK ABOUT IT? I QUITE LIKE THAT MP3 SONG! / ‘T_EST’ T-EST “ABC”.
For Start Case / Proper Case : SEARCH =
(?-is)(\w)(\w*)
and REPLACE =\u\1\L\2
BEFORE Hi guys : o’nEil, and I, created A test. wHat DO you ThinK About IT? i QUITE like that mP3 Song! / ‘T_esT’ T-Est “aBc”.
AFTER Hi Guys : O’Neil, And I, Created A Test. What Do You Think About It? I Quite Like That Mp3 Song! / ‘T_est’ T-Est “Abc”.
For tOGGLE cASE : SEARCH =
(?-is)([A-Z])|[a-z]
and REPLACE =(?1\l:\u)$0
BEFORE Hi guys : o’nEil, and I, created A test. wHat DO you ThinK About IT? i QUITE like that mP3 Song! / ‘T_esT’ T-Est “aBc”.
AFTER hI GUYS : O’NeIL, AND i, CREATED a TEST. WhAT do YOU tHINk aBOUT it? I quite LIKE THAT Mp3 sONG! / ‘t_ESt’ t-eST “AbC”.
For “light” Sentence case : SEARCH =
(?-is)([a-zA-Z])(.*?)((?=\b[Ii]\b)|(?=[.?!](\h|\R|\z)))|([a-zA-Z])(.*)
and REPLACE =\u\1\5\L\2\6
BEFORE Hi guys : o’nEil, and I, created A test. wHat DO you ThinK About IT? i QUITE like that mP3 Song! / ‘T_esT’ T-Est “aBc”.
AFTER Hi guys : o’neil, and I, created a test. What do you think about it? I quite like that mp3 song! / ‘T_est’ t-est “abc”.
For lower case /mid sentence case : SEARCH =
(?-is).+
and REPLACE =\L$0
BEFORE Hi guys : o’nEil, and I, created A test. wHat DO you ThinK About IT? i QUITE like that mP3 Song! / ‘T_esT’ T-Est “aBc”.
AFTER hi guys : o’neil, and i, created a test. what do you think about it? i quite like that mp3 song! / ‘t_est’ t-est “abc”.
For SCREAMING_SNAKE_CASE : SEARCH =
(?-is)(\w+)|[^\w\r\n]+
and REPLACE =(?1\U\1:_)
BEFORE Hi guys : o’nEil, and I, created A test. wHat DO you ThinK About IT? i QUITE like that mP3 Song! / ‘T_esT’ T-Est “aBc”.
AFTER HI_GUYS_O_NEIL_AND_I_CREATED_A_TEST_WHAT_DO_YOU_THINK_ABOUT_IT_I_QUITE_LIKE_THAT_MP3_SONG_T_EST_T_EST_ABC_
For snake_case : SEARCH =
(?-is)(\w+)|[^\w\r\n]+
and REPLACE =(?1\L\1:_)
BEFORE Hi guys : o’nEil, and I, created A test. wHat DO you ThinK About IT? i QUITE like that mP3 Song! / ‘T_esT’ T-Est “aBc”.
AFTER hi_guys_o_neil_and_i_created_a_test_what_do_you_think_about_it_i_quite_like_that_mp3_song_t_est_t_est_abc_
For KEBAB-CASE : SEARCH =
(?-is)(\w+)|[^\w\r\n]+
and REPLACE =(?1\U\1:-)
BEFORE Hi guys : o’nEil, and I, created A test. wHat DO you ThinK About IT? i QUITE like that mP3 Song! / ‘T_esT’ T-Est “aBc”.
AFTER HI-GUYS-O-NEIL-AND-I-CREATED-A-TEST-WHAT-DO-YOU-THINK-ABOUT-IT-I-QUITE-LIKE-THAT-MP3-SONG-T_EST-T-EST-ABC-
For Train-Case : SEARCH =
(?-is)(\w)(\w*)|[^\w\r\n]+
and REPLACE =(?1\u\1\L\2:-)
BEFORE Hi guys : o’nEil, and I, created A test. wHat DO you ThinK About IT? i QUITE like that mP3 Song! / ‘T_esT’ T-Est “aBc”.
AFTER Hi-Guys-O-Neil-And-I-Created-A-Test-What-Do-You-Think-About-It-I-Quite-Like-That-Mp3-Song-T_est-T-Est-Abc-
For kebab-case : SEARCH =
(?-is)(\w+)|[^\w\r\n]+
and REPLACE =(?1\L\1:-)
BEFORE Hi guys : o’nEil, and I, created A test. wHat DO you ThinK About IT? i QUITE like that mP3 Song! / ‘T_esT’ T-Est “aBc”.
AFTER hi-guys-o-neil-and-i-created-a-test-what-do-you-think-about-it-i-quite-like-that-mp3-song-t_est-t-est-abc-
For PascalCase : SEARCH =
(?-is)([a-zA-Z])([a-zA-Z]*)|[^a-zA-Z\r\n]+
and REPLACE =\u\1\L\2
BEFORE Hi guys : o’nEil, and I, created A test. wHat DO you ThinK About IT? i QUITE like that mP3 Song! / ‘T_esT’ T-Est “aBc”.
AFTER HiGuysONeilAndICreatedATestWhatDoYouThinkAboutItIQuiteLikeThatMpSongTEstTEstAbc
For CamelCase / WikiCase : SEARCH =
(?-is)([a-zA-Z])([a-zA-Z]+)|(\b|_)[a-zA-Z](\b|_)|[^a-zA-Z\r\n]+
and REPLACE =\u\1\L\2
BEFORE Hi guys : o’nEil, and I, created A test. wHat DO you ThinK About IT? i QUITE like that mP3 Song! / ‘T_esT’ T-Est “aBc”.
AFTER HiGuysNeilAndCreatedTestWhatDoYouThinkAboutItQuiteLikeThatMpSongEstEstAbc
For lowerCamelCase : SEARCH =
(?-is)([a-zA-Z])([a-zA-Z]+)|(\b|_)[a-zA-Z](\b|_)|[^a-zA-Z\r\n]+
and REPLACE =\u\1\L\2
then : SEARCH =
(?-is)([A-Z][a-z]+){2,}
REPLACE =\l$0
BEFORE Hi guys : o’nEil, and I, created A test. wHat DO you ThinK About IT? i QUITE like that mP3 Song! / ‘T_esT’ T-Est “aBc”.
AFTER hiGuysNeilAndCreatedTestWhatDoYouThinkAboutItQuiteLikeThatMpSongEstEstAbc
For StUdLyCaPs : SEARCH =
(?-is)([a-zA-Z])[^a-zA-Z\r\n]*([a-zA-Z])?|[^a-zA-Z\r\n]+
and REPLACE =\u\1\l\2
BEFORE Hi guys : o’nEil, and I, created A test. wHat DO you ThinK About IT? i QUITE like that mP3 Song! / ‘T_esT’ T-Est “aBc”.
AFTER HiGuYsOnEiLaNdIcReAtEdAtEsTwHaTdOyOuThInKaBoUtItIqUiTeLiKeThAtMpSoNgTeStTeStAbC
For StUdLyCaPs, variant 1 : SEARCH =
(?-is)([a-zA-Z])[^a-zA-Z\r\n]*([a-zA-Z])?|[^a-zA-Z\r\n]+
and REPLACE =\l\1\u\2
BEFORE Hi guys : o’nEil, and I, created A test. wHat DO you ThinK About IT? i QUITE like that mP3 Song! / ‘T_esT’ T-Est “aBc”.
AFTER hIgUySoNeIlAnDiCrEaTeDaTeStWhAtDoYoUtHiNkAbOuTiTiQuItElIkEtHaTmPsOnGtEsTtEsTaBc
For StUdLyCaPs, variant 2 : SEARCH =
(?-is)([aeiouy])|([B-DF-HJ-NP-TV-XZ])|[^a-zA-Z\r\n]+
and REPLACE =\u\1\l\2
BEFORE Hi guys : o’nEil, and I, created A test. wHat DO you ThinK About IT? i QUITE like that mP3 Song! / ‘T_esT’ T-Est “aBc”.
AFTER hIgUYsOnEIlAndIcrEAtEdAtEstwhAtdOYOUthInkAbOUtItIqUItElIkEthAtmpsOngtEsttEstAbc
For CaNoNiCaLSTuDLyCaPS : SEARCH =
(?-is)([AEIOUY])|([b-df-hj-np-tv-xz])|[^a-zA-Z\r\n]+
and REPLACE =\l\1\u\2
BEFORE Hi guys : o’nEil, and I, created A test. wHat DO you ThinK About IT? i QUITE like that mP3 Song! / ‘T_esT’ T-Est “aBc”.
AFTER HiGuySoNeiLaNDiCReaTeDaTeSTWHaTDoyouTHiNKaBouTiTiQuiTeLiKeTHaTMPSoNGTeSTTeSTaBC
Best regards and have a good day !
guy038
-
-
+1 for this feature. I really really need this feature. Please add this feature as soon as possible.
Thanks in advance.
-
I created a small plugin called “FirstUpper” that does different types of capitalizations. I am adding more options as I have time.
The current options are:- Capitalize Selected Title
- Just select the text and hit
Ctrl+Alt+U
to properly capitalize the title according to the Chicago Manual of style.
- Just select the text and hit
- Capitalize All Markdown Titles
- Finds all markdown headings (Setext and Atx style) and properly capitalizes them.
- Capitalize First Letter of All Sentences
- Capitalizes the first letter of the first word of every sentence in the document. (one issue this has is with file extensions. It will capitalize “.txt” to “.Txt”.)
I will be adding more features such as a convert to camelcase feature.
I hope this helps!
Zach - Capitalize Selected Title
-
@guy038
I was struggle to make an expression to match a word that has at least one capital letter inside (not a lowercase) and replace that word to Start Case or Title Case
here is an example:befOre: OnE teXT wIll Be transformed vERY welL
After: One Text Will Be transformed Very Well
if the word is lowercase or is already Start Case then it can stay as it is.
I would appreciate any help!
-
Hello, ortomind,
Not very difficult, indeed !
In fact, the best would be to reverse your rules that you would like to ! So :
-
If a word contains, ONLY, lowercase letters ( and possible digits and/or the underscore character ), just rewrite it
-
ELSE, any word must be rewritten, with the Start Case capitalization rule
Therefore, a correct regex S/R could be :
SEARCH
(?-i)\b[\l\d_]+\b|(\w)(\w*)
REPLACE
(?1\u\1\L\2:$0)
NOTES :
-
First, the in-line modifier
(?-i)
forces the regex engine to search in a sensitive way -
Then, due to
|
character, the regex engine must choose between the two alternatives :-
A Non-Empty range of Non_Upper characters
[\l\d_]+
, which must be a true word, due to the\b
assertions, that surround it -
Any other word, containing, at least, one character, with two groups :
-
The first character of the word, stored in group 1 (
(\w)
) -
All the remaining characters of this word, stored in group 2 (
(\w*)
)
-
-
-
In replacement, the syntax represents a conditional replacement, based on group 1
-
If group 1 exists, we rewrite this group ( the first character of a word ) uppercase (
\u\1
), then, the group 2 ( All the remaining characters ) lowercase (\L\2
) -
Else ( Group 1 do not exist ) we just rewrite the entire matched string ( the word, with NO uppercase letter ) (
$0
)
-
So, for instance, from the original text, below :
OnE teXT wIll Be trans_formed123 vERY welL
After clicking of the Replace All button, you should obtain, with the regex S/R above, the modified text, below :
One Text Will Be trans_formed123 Very Well
With the message Replace All: 7 occurrences were remplaced
Best Regards,
guy038
-
-
Dear guy038,
This works as it supposed and I thank you for it.
Could you tell me if there is a way to insert this in a macro?
Eventually how I can do at once in a macro all following 3 search/replace:
SEARCH (?-i)\b[\l\d_]+\b|(\w)(\w*)
REPLACE (?1\u\1\L\2:$0)
SEARCH ([^\s])([ ]{2,})([^\s])
REPLACE \1 \3
SEARCH [>:!?.] [A-Z]
REPLACE \L$0
thanks,
ortomind -
There is documentation on how to place search+replace in a macro, here: http://docs.notepad-plus-plus.org/index.php/Editing_Configuration_Files#Search_.2F_Replace_encoding
That may be a bit cryptic, but here’s one example of many that can be found, that show how to implement a real use-case: https://notepad-plus-plus.org/community/topic/11735/notepad-macro-not-working-correctly/2
You can adapt this example (which coincidentally also involves upper/lowercase manipulation!) for what you’re trying to do.
-