我有以下字符串,我应该用_
替换每个奇数出现的空格。
字符串:
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
答案 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'