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

--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to