2016-09-07 21 views
0

如何更改字符串使用for循環沒有正則表達式。我如何更改字符串使用for循環python無正則表達式

例如:(2.7.1蟒)

import re 
trans = lambda src: re.sub("([A-Z])", lambda m:"_"+m.group().lower(), src, flags=0) 
print(trans("helloWorld")) 

我希望結果爲:

hello_world 

我想從正則表達式的版本變成for循環的版本。

條件

  • 結果將是相同的
  • 只是一條線!
  • 使用循環
+0

每當我看到命名帶有嵌入式lambda的'lambda's,我想「編碼競爭/挑戰」。這是爲了什麼?如果沒有,我強烈建議不要這種做法。 – TigerhawkT3

+0

你應該避免試圖在一行中做所有事情......它只會導致無法讀取的結果(在Python中通常是不可能的)。 – poke

+1

如果您試圖將camelCase轉換爲下劃線,您應該調查此問題的所有答案:http://stackoverflow.com/q/1175208 –

回答

1
def change(string): 
    for letter in string: 
     if letter.isupper(): 
      yield '_{}'.format(letter.lower()) 
     else: 
      yield letter 

print ''.join(change("helloWorld")) 

如果你想擁有它在同一行:

print ''.join(letter.isupper() and '_{}'.format(letter.lower()) or letter for letter in 'helloWorld') 
0

您可以使用實現它list comprehension(即一個襯墊for循環)爲:

>>> my_string = "helloWorld" 
>>> ''.join(['_{}'.format(s.lower()) if s.isupper() else s for s in my_string]) 
'hello_world' 

說明:

列表不過是一個字符列表。迭代每個字符並檢查是否使用isupper() fuct作爲大寫字符。如果是,請使用lower()函數將其替換爲_<lower-case>

上述列表理解的結果是:['h', 'e', 'l', 'l', 'o', '_w', 'o', 'r', 'l', 'd']。加入列表找到你的字符串,即hello_world

相關問題