如何将字符串中的模式向前移动一个位置(删除第一个,替换最后一个)?

How can I shift patterns in a string one place ahead (removing the first, replacing the last)?

我在 Python 中有一个字符串,我想将一个模式提前移动 1 位。

这是我的字符串:

my_string = [AudioLengthInSecs: 37.4]hello[seconds_silence:
0.65]one[seconds_silence: 0.54]two[seconds_silence: 0.59]three[seconds_silence: 
0.48]hello[seconds_silence: 2.32]

我想将 [seconds_silence: XXXX] 之后的数字提前一个位置(并删除第一个和最后一个(因为那一个被转移))。结果应该是这样的:

my_desired_string = [AudioLengthInSecs: 37.4]hello[seconds_silence: 0.54]one[seconds_silence: 0.59]two[seconds_silence: 
0.48]three[seconds_silence: 2.32]hello

这是我的代码:

import re

my_string = "[AudioLengthInSecs: 37.4]hello[seconds_silence:0.65]one[seconds_silence: 0.54]two[seconds_silence: 0.59]three[seconds_silence: 0.48]hello[seconds_silence: 2.32]"

# First, find all the numbers in the string 
all_numbers =  (re.findall('\d+', my_string ))

# Secondly, remove the first 4 numbers ()
all_numbers = all_numbers[4:]

# combine the numbers into one string
all_numbers
combined_numbers = [i+j for i,j in zip(all_numbers[::2], all_numbers[1::2])]

# Than loop over the string and instert 


for word in my_string.split(): 
    print(word)
    if word == "[seconds_silence":
        print(word)
        # here i wanted to check if [soconds_silence was recognized
        # and replace with value from combined_numbers
        # however, this is failing obviously

想法是找到所有对:

  • [seconds_silence 之前的字符串:...] 片段(捕获第 1 组),
  • 和上面的片段本身(捕获第 2 组)。

然后:

  • 删除第一个 [seconds_silence: ...] 片段,
  • 并加入两个列表,

但由于它们现在的长度不同,因此需要 itertools.zip_longest

所以完成任务的全部代码是:

import itertools
import re

my_string = '[AudioLengthInSecs: 37.4]hello[seconds_silence:0.65]'\
    'one[seconds_silence: 0.54]two[seconds_silence: 0.59]'\
    'three[seconds_silence: 0.48]hello[seconds_silence: 2.32]'
gr1 = []
gr2 = []
for mtch in re.findall(r'(.+?)(\[seconds_silence: ?[\d.]+\])', my_string):
    g1, g2 = mtch
    gr1.append(g1)
    gr2.append(g2)
gr2.pop(0)
my_desired_string = ''
for g1, g2 in itertools.zip_longest(gr1, gr2, fillvalue=''):
    my_desired_string += g1 + g2
print(my_desired_string)