2016-04-14 12 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

あなたの入力では、フィールドは1つのスペースで正確に区切られています。そのような行はすべて1つのスペースしか持たないと仮定できますか? – mgilson

+0

はいすべてのフィールドは1つのスペースで区切られます。私はスペースの数を取って、正規表現のオカレンスを使ってみましたが、マークを打つことはできませんでした。 –

答えて

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

これを処理するには正規表現を使用できます。スペースの後ろに空白以外の文字が続き、その後に別のスペースまたは入力の最後が続く必要があります。最初のスペースは置き換えますが、2番目のスペースは置き換えません。

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

これは、入力の奇数と偶数の両方のスペースで非常にうまく動作します。 –

関連する問題