2015-08-20 12 views
-2

我正在尋找一種方式,採取一個字符串,它看起來像下面替換多個字符:字符串中的一個由發電機

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

而更換的第一個「一」與偶數,第二個是下一個 的偶數,以此類推。然後,我想先取出第一個「b」併爲其指定一個奇數,然後下一個「b」得到第二個最高的奇數,依此類推,無論字符串是多長。我是 主要在Python 2.7中工作,但如果存在解決方案,它會願意研究其他語言。

+0

任何企圖??/ –

+0

那麼是什麼問題?你可以解析字符串,保持a和b的數量,並且對於每個p^th a,將它分配給2 * p並且對於每個q^th b,將它分配給(2 * q-1) – vish4071

+0

下一次,請顯示我們已經嘗試了一些代碼。 – Ben

回答

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) 
+0

非常感謝,抱歉沒有發佈更多的背景數據,我昨晚做了這個。如果我們切換組號碼,它會以另一種方式工作嗎? 如果x.group(1)== 'B': B + = 2 回報STR(B) 其他: A + = 2 回報STR(一) –

+0

,我發現了錯誤 名「重新'沒有定義是一個代碼錯誤,或者它可能是由於我使用Visual Studio(2015) –

+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