用生成器中的一个字符替换字符串中的多个字符
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)
我正在寻找一种方法来获取如下所示的字符串:
(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)