我正在尋找一種方式,採取一個字符串,它看起來像下面替換多個字符:字符串中的一個由發電機
(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中工作,但如果存在解決方案,它會願意研究其他語言。
我正在尋找一種方式,採取一個字符串,它看起來像下面替換多個字符:字符串中的一個由發電機
(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中工作,但如果存在解決方案,它會願意研究其他語言。
下面的正則表達式替換應該工作:
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)
非常感謝,抱歉沒有發佈更多的背景數據,我昨晚做了這個。如果我們切換組號碼,它會以另一種方式工作嗎? 如果x.group(1)== 'B': B + = 2 回報STR(B) 其他: A + = 2 回報STR(一) –
,我發現了錯誤 名「重新'沒有定義是一個代碼錯誤,或者它可能是由於我使用Visual Studio(2015) –
這一事實造成的。忘記了,我修復了它 –
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
任何企圖??/ –
那麼是什麼問題?你可以解析字符串,保持a和b的數量,並且對於每個p^th a,將它分配給2 * p並且對於每個q^th b,將它分配給(2 * q-1) – vish4071
下一次,請顯示我們已經嘗試了一些代碼。 – Ben