Python: 改变大写字母

4
我无法想出如何在Python中替换字符串中的第二个大写字母。 例如:
string = "YannickMorin" 
我希望它变成yannick-morin。 目前,我可以通过执行string.lower()将所有字符变成小写,但如何在找到第二个大写字母时添加破折号呢?

你可以使用 re 模块将所有大写字母替换为 -\1,然后将所有内容转换为小写。或者使用 re.split 在每个大写字母处进行分割,然后使用 '-'.join 连接,最后再转换为小写。 - R Nar
这里有一个类似的例子:https://dev59.com/IXM_5IYBdhLWcg3w6HvT - Javier Conde
4个回答

5
您可以使用正则表达式。
>>> import re
>>> split_res = re.findall('[A-Z][^A-Z]*', 'YannickMorin')
['Yannick', 'Morin' ]
>>>'-'.join(split_res).lower()

1
这更多是正则表达式的任务:
result = re.sub(r'[a-z]([A-Z])', r'-\1', inputstring).lower()

演示:

>>> import re
>>> inputstring = 'YannickMorin'
>>> re.sub(r'[a-z]([A-Z])', r'-\1', inputstring).lower()
'yannic-morin'

1
在单词开头之外查找大写字母并在其前面插入破折号。然后将所有内容转换为小写。
>>> import re
>>> re.sub(r'\B([A-Z])', r'-\1', "ThisIsMyText").lower()
'this-is-my-text'

0

lower()方法不会直接改变字符串,它返回一个需要打印出来或赋值给另一个变量的值。你需要替换它。一种解决方案是:

strAsList = list(string)
strAsList[0] = strAsList[0].lower()
strAsList[7] = strAsList[7].lower()
strAsList.insert(7, '-')
print (''.join(strAsList))

OP想要从TitleCase转换为dashed-case。 - Kevin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,