将字符串中的多个字符替换为生成器中的一个字符

时间:2015-08-20 06:58:08

标签: python algorithm replace character generator

我正在寻找一种方法来获取如下所示的字符串:

(a,1),(b,1),(a,1),(b,5),(a,1),(b,2),(a,1),(b,1),(a,2),(b,6),(a,2)

将第一个“a”替换为偶数,第二个替换为下一个 偶数,等等,无论字符串多长。然后我想取第一个“b”并给它分配一个奇数,然后下一个“b”得到 下一个最高的奇数,依此类推,无论字符串多长。我 主要在Python 2.7中工作,但如果存在解决方案,则愿意研究其他语言。

2 个答案:

答案 0 :(得分:0)

even = 2
while "a" in string:
    string = string.replace("a", str(even), 1)
    even += 2

odd = 1
while "b" in string:
    string = string.replace("b", str(odd), 1)
    odd += 2

答案 1 :(得分:0)

以下正则表达式替换应该起作用:

import re

def odd_even(x):
    global a,b
    if x.group(1) == 'a':
        a += 2
        return str(a)
    else:
        b += 2
        return str(b)

a = 0
b = -1
source = "(a,1),(b,1),(a,1),(b,5),(a,1),(b,2),(a,1),(b,1),(a,2),(b,6),(a,2)"

print re.sub("([ab])", odd_even, source)

打印:

(2,1),(1,1),(4,1),(3,5),(6,1),(5,2),(8,1),(7,1),(10,2),(9,6),(12,2)