回答
您可以使用re
模塊:
import re
s = 'JHDKFksdKSJDsGGGG'
print re.sub('[A-Z]+','_',s)
基本上,它是它取代了大寫的羣集(該[A-Z]+
部分)與下劃線(第二個參數)。
[A-Z]
任何大寫字符匹配從A
到Z
和+
意味着你想有一個匹配至少一個字符(你不想更換空字符串以下劃線)。
因此,[A-Z]+
匹配一個大寫字母的集羣。
所以re.sub
所做的是它需要3個參數(模式,替換和字符串)。它遍歷字符串,查找與模式匹配的內容(在這種情況下:看起來像一組大寫字符),並用替換字符串替換這些組。
這是什麼意思? – user2597879
[A-Z]與羣集或組不匹配。它是一個與A-Z範圍內的*單個*字符匹配的字符類,即任何大寫字母。它是** + **使其成爲「羣集」(匹配一個或多個前面的字符或類)。 –
謝謝!我已經更新了我的答案。 – jh314
>>> import re
>>> re.sub("[A-Z]+", "_", "JHDKFksdKSJDsGGGG")
'_ksd_s_'
[A-Z]
意味着匹配在範圍A-Z包括任何字符。
+
表示匹配前面的一個或多個表達式。
強制性非正則表達式的解決方案:一個可迭代的
>>> from itertools import groupby
>>> s = "JHDKFksdKSJDsGGGG"
>>> ''.join('_' if k else ''.join(g) for k,g in groupby(s, str.isupper))
'_ksd_s_'
groupby
組連續元素一起如果它們具有相同的值,在此情況下,由keyfunction str.isupper
指定。 IOW,groupby
生產
>>> [(k, list(g)) for k,g in groupby(s, str.isupper)]
[(True, ['J', 'H', 'D', 'K', 'F']), (False, ['k', 's', 'd']),
(True, ['K', 'S', 'J', 'D']), (False, ['s']), (True, ['G', 'G', 'G', 'G'])]
,然後我們更換或相應單獨離開。
- 1. 如何用下劃線替換大寫字母?
- 2. 用小寫字母替換下劃線
- 3. 將所有下劃線連接的字母轉換爲大寫php
- 4. PHP - 前大寫字母加下劃線
- 5. 隱蔽首字母大寫小寫以下劃線春天
- 6. 連續用大寫字母
- 7. 現代重寫:更換所有下劃線(_)與連字符( - )
- 8. Python代碼連續字母
- 9. 預先在字符串中加下劃線的大寫字母
- 10. 如何獲取以大寫字母開頭的所有單詞?
- 11. 如何抓取以大寫字母開頭的所有單詞?
- 12. 如何用下劃線替換字符串的字母?
- 13. 的Javascript取代下劃線+字母
- 14. 允許的大寫字母+數字(在開始時沒有)+下劃線
- 15. 在大寫字母之前加下劃線
- 16. 替換除字母,數字,空格和下劃線之外的所有字符
- 17. 將單個和連續的下劃線重寫爲破折號
- 18. 下劃線代替在JavaScript
- 19. 連字符和下劃線以及PHP格式的字母
- 20. 小寫字母和下劃線連接的函數
- 21. 下劃線到駝峯大小寫,排除大寫下劃線
- 22. 如何用Hangman中選定的字母替換下劃線
- 23. 如何在IIRF規則中用'下劃線'代替'短劃線'?
- 24. 如何在內部區域用短劃線代替下劃線?
- 25. 如何用空格替換所有大寫字母?
- 26. 如何用星號替換所有大寫字母?
- 27. preg_replace下劃線之前的所有數字,比替換下劃線和結束
- 28. 我如何在下劃線後用大寫字母php正則表達式
- 29. htaccess用連字符替換下劃線
- 30. 的java +代替小字母大寫字母在args
你試過了什麼?如果你不能自己開始,這可能是一個好主意,以避免正則表達式。 http://meta.stackexchange.com/questions/156810/stack-overflow-question-checklist –