str.title() fails with words containing apostrophes

Terry Reedy tjreedy at
Sun Mar 5 15:40:58 EST 2017

On 3/5/2017 2:38 PM, MRAB wrote:
> On 2017-03-05 17:54, Steve D'Aprano wrote:
>> I'm trying to convert strings to Title Case, but getting ugly results
>> if the
>> words contain an apostrophe:
>> py> 'hello world'.title()  # okay
>> 'Hello World'
>> py> "i can't be having with this".title()  # not okay
>> "I Can'T Be Having With This"
>> Anyone have any suggestions for working around this?
> A bit of regex?
> import re
> def title(string):
>     return re.sub(r"\b'\w", lambda m:, string.title())

Nice.  It lowercases a word char that follows an "'" that follows a word 
without an intervening non-word char. It passes this test:
print(title("'time' isn't 'timeless'!"))
'Time' Isn't 'Timeless'!

It guess the reason not to bake this exception into str.title is that it 
is language specific and could even be wrong if someone used "'" to 
separate words (perhaps in a different alphabet).

Terry Jan Reedy

More information about the Python-list mailing list