Python正则表达式替换字符串中的每第二次出现

Nic*_*sas 6 python regex string

我有一个包含如下数据的字符串:

str1 = "[2.4],[5],[2.54],[4],[3.36],[4.46],[3.36],[4],[3.63],[4.86],[4],[4.63]"
Run Code Online (Sandbox Code Playgroud)

我想用 替换每第二次迭代,"],["所以","它看起来像这样:

str2 = "[2.4,5],[2.54,4],[3.36,4.46],[3.36,4],[3.63,4.86],[4,4.63]"
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止所拥有的:

str1 = "[2.4],[5],[2.54],[4],[3.36],[4.46],[3.36],[4],[3.63],[4.86],[4],[4.63]"
s2 = re.sub(r"],\[", ',', str1)
print(s2)
Run Code Online (Sandbox Code Playgroud)

我试图搞乱这个:

(.*?],\[){2}
Run Code Online (Sandbox Code Playgroud)

但它似乎没有给我带来想要的结果。

我尝试使用循环,但在使用我在此处找到的示例代码后,我只成功地仅替换了第二次出现的情况,并且没有任何内容。代码是:

import re

def replacenth(string, sub, wanted, n):
    where = [m.start() for m in re.finditer(sub, string)][n-1]
    before = string[:where]
    after = string[where:]
    after = after.replace(sub, wanted, 1)
    newString = before + after
    print(newString)
For these variables:

string = 'ababababababababab'
sub = 'ab'
wanted = 'CD'
n = 5
Run Code Online (Sandbox Code Playgroud)

谢谢。

Wik*_*żew 6

您可以使用

import re
from itertools import count

str1 = "[2.4],[5],[2.54],[4],[3.36],[4.46],[3.36],[4],[3.63],[4.86],[4],[4.63]"
c = count(0)
print( re.sub(r"],\[", lambda x: "," if next(c) % 2 == 0 else x.group(), str1) )
# => [2.4,5],[2.54,4],[3.36,4.46],[3.36,4],[3.63,4.86],[4,4.63]
Run Code Online (Sandbox Code Playgroud)

请参阅Python 演示

正则表达式是相同的,],\[它匹配文字],[文本。

初始化c = count(0) 计数器,其值在用作替换参数的 lambda 表达式内每次匹配时递增。当计数器为偶数时,匹配项将替换为逗号,否则保持原样。