from string import capwords
t = "\"i'm happy,\" said tanby"
sText = t.split()
rText = []
for str in sText:
if '\"' in str[0]:
t = capwords(str, sep='\"')
rText.append(t)
else:
t = capwords(str)
rText.append(t)
print(' '.join(rText))
>>> "I'm Happy," Said Tanby
^ ^ ^ ^
忽略报价并大写。
使用title()
时,变为“我是,当使用capwords()
时,变为”我是。
还有更好的方法吗?
答案 0 :(得分:2)
引号会干扰capwords
算法。使用带有单引号的re.sub
模式可以修复它。正则表达式匹配一个或多个\w
(单词字符)或单引号。每个匹配都传递给lambda函数并大写以进行替换。
>>> import re
>>> s='"i\'m happy," said tanby'
>>> print(re.sub(r"\b[\w']+\b",lambda m: m.group().capitalize(),s))
"I'm Happy," Said Tanby