2015-11-06 124 views
4

我無法弄清楚如何替換python中字符串中的第二個大寫字母。Python:更改大寫字母

例如:

string = "YannickMorin" 

我希望它成爲雅尼克 - 莫蘭

截至現在,我可以做string.lower()使其全部用小寫,但如何把當它發現第二個大寫字母時是短劃線。

+0

您可以使用're'模塊將所有大寫字母與' - \ 1'配合使用,然後將所有小寫字母都設爲小寫字母。或者使用're.split'在每個大寫字母處拆分,然後使用'' - '。join',然後轉換爲小寫字母 –

+0

以下是類似的代碼:http://stackoverflow.com/questions/1175208/elegant-python-function -to-convert-camelcase-to-camel-case –

回答

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' 
0

lower()方法不會更改到位串它返回需要打印出來的值,或者分配給另一個變量。您需要更換它..一個解決方案是:

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

OP想要將TitleCase轉換爲虛線。 – Kevin

1

查找大寫字母,不是在單詞的開始處插入破折號。然後將所有內容轉換爲小寫。

>>> import re 
>>> re.sub(r'\B([A-Z])', r'-\1', "ThisIsMyText").lower() 
'this-is-my-text'