str.title() fails with words containing apostrophes

Terry Reedy 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 mailing list

AltStyle によって変換されたページ (->オリジナル) /