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

Replace multiple characters in a string with one from a 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 中工作,但如果存在解决方案,愿意研究其他语言。

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

以下正则表达式替换应该有效:

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)