str.title() fails with words containing apostrophes
tjreedy at udel.edu
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: m.group().lower(), 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