2010-10-01 514 views
0

交換在一個字符串標記值我已標記化的名稱(字符串),用下劃線分離的令牌,這將總是由M,L,或R.通過正則表達式

值包含一個「側」令牌該值的存在保證是唯一的(沒有其他標記可能獲得相似值的重複或危險)。 在例如:

foo_M_bar_type 
foo_R_bar_type 
foo_L_bar_type 

我想,在一個單一的正則表達式,交換大號- [R反之亦然每當找到,並且中號被保持不變。 IE上面會變成:

foo_M_bar_type 
foo_L_bar_type 
foo_R_bar_type 

當推這個理想的表達。

這就是我在寫一些簡單的東西時做了10分鐘的練習,我不能像我想的那樣簡潔地打破。這個問題本身當然是微不足道的,只要改變模式就可以解決這個問題,但是我希望在一個單一的re.sub()中做一些幫助。當然任何想法都是值得歡迎的,但是這是一個智力活動,我和幾個同事都失敗了,我很想看到它被破解。

是的,我完全知道它可能不被視爲非常Python化,也不是理想的,解決與正則表達式的問題,而是幽默我請:)

在此先感謝

回答

3

這個答案[ab]使用替換功能:

>>> s = "foo_M_bar_type foo_R_bar_type foo_L_bar_type" 
>>> import re 
>>> re.sub("_[LR]_", lambda m: {'_L_':'_R_','_R_':'_L_'}[m.group()], s) 
'foo_M_bar_type foo_L_bar_type foo_R_bar_type' 
>>>