2016-04-14 35 views
1

我有以下字符串,我應該用_來代替每個奇數空格。Python用「_」代替每一個奇數的空格

字符串:

901 R 902 M 903 Picture_message 904 NA 905 F 906 Local_Relay 907 46 908 51705 909 306910001112/[email protected]

期望的字符串:

901_R 902_M 903_Picture_message 904_NA 905_F 906_Local_Relay 907_46 908_51705 909_306910001112/[email protected]

+0

你嘗試過什麼嗎?展示給我們! –

+0

在您的輸入中,這些字段由_exactly one_空格分隔。我們能否假設所有這些線路都只有一個空間? – mgilson

+0

是的,每個字段將被一個空格分開。我嘗試過空間計數,也使用正則表達式,但無法達到標準。 –

回答

1

首先,我可能會分割字符串成它的組成部分:

pieces = s.split() 

然後我加入每一個元素,它是適當的鄰居_,並加入與' '休息...

' '.join('_'.join(pieces[i:i+2]) for i in xrange(0, len(pieces), 2)) 

演示:

>>> s = '901 R 902 M 903 Picture_message 904 NA 905 F 906 Local_Relay 907 46 908 51705 909 306910001112/[email protected]' 
>>> pieces = s.split() 
>>> ' '.join('_'.join(pieces[i:i+2]) for i in xrange(0, len(pieces), 2)) 
'901_R 902_M 903_Picture_message 904_NA 905_F 906_Local_Relay 907_46 908_51705 909_306910001112/[email protected]' 
0

你可以使用正則表達式與僅其實是將每個奇數調用替換功能:

from itertools import count 
import re 

def replace_odd_spaces(text): 
    counter = count() 
    return re.sub('\s+', lambda m: match.group() if next(counter) % 2 else '_', text) 

演示:

>>> text = '901 R 902 M 903 Picture_message 904 NA 905 F 906 Local_Relay 907 46 908 51705 909 306910001112/[email protected]' 
>>> replace_odd_spaces(text) 
'901_R 902_M 903_Picture_message 904_NA 905_F 906_Local_Relay 907_46 908_51705 909_306910001112/[email protected]' 
+0

謝謝!所有3種方式完美地工作。 –

5

您可以使用正則表達式來處理這個問題。您需要匹配一個空格,後跟任何非空格字符,後跟另一個空格或輸入的結尾。您替換第一個空間,但不是第二個空間。

re.sub(r' ([^ ]*(?: |$))', r'_\1', text) 
+1

現在這個工作非常好,對於輸入中的奇數和偶數空格都是如此。 –

相關問題