Python用“_”替换每个奇数的空格

时间:2016-04-14 07:12:43

标签: python

我有以下字符串,我应该用_替换每个奇数出现的空格。

字符串:

901 R 902 M 903 Picture_message 904 NA 905 F 906 Local_Relay 907 46 908 51705 909 306910001112/TYPE=PLMN@mms.cosmote.gr

预期字符串:

901_R 902_M 903_Picture_message 904_NA 905_F 906_Local_Relay 907_46 908_51705 909_306910001112/TYPE=PLMN@mms.cosmote.gr

3 个答案:

答案 0 :(得分:5)

您可以使用正则表达式来处理此问题。您需要匹配空格,后跟任何非空格字符,后跟另一个空格或输入的结尾。您替换第一个空格,但不替换第二个空格。

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

答案 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/TYPE=PLMN@mms.cosmote.gr'
>>> 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/TYPE=PLMN@mms.cosmote.gr'

答案 2 :(得分: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/TYPE=PLMN@mms.cosmote.gr'
>>> replace_odd_spaces(text)
'901_R 902_M 903_Picture_message 904_NA 905_F 906_Local_Relay 907_46 908_51705 909_306910001112/TYPE=PLMN@mms.cosmote.gr'