Python - 如何使用带有n个副本的正则表达式替换子字符串

时间:2016-10-29 17:42:42

标签: python regex string

我有一个字符串,其中包含许多单一模式的重复,如

a = 'eresQQQutnohnQQQjkhjhnmQQQlkj'

我有另一个字符串,如

b = 'rerTTTytu'

我想用整个第二个字符串替换为QQQ'和TTT',我想在这种情况下找到3个不同的结果:

'ererTTTytuohnQQQjkhjhnmQQQlkj'
'eresQQQutnrerTTTytujhnmQQQlkj'
'eresQQQutnohnQQQjkhjrerTTTytu'

我尝试过使用re.sub

re.sub('\w{3}QQQ\w{3}' ,b,a)

但我只获得了第一个,而且我不知道如何获得其他两个解决方案。

1 个答案:

答案 0 :(得分:2)

编辑:根据您的要求,“QQQ”周围的两个字符也将被替换。

我不知道这是否是问题的最优雅或最简单的解决方案,但它确实有效:

import re

# Find all occurences of ??QQQ?? in a - where ? is any character
matches = [x.start() for x in re.finditer('\S{2}QQQ\S{2}', a)]
# Replace each ??QQQ?? with b
results = [a[:idx] + re.sub('\S{2}QQQ\S{2}', b, a[idx:], 1) for idx in matches]

print(results)

<强>输出

['errerTTTytunohnQQQjkhjhnmQQQlkj',
'eresQQQutnorerTTTytuhjhnmQQQlkj',
'eresQQQutnohnQQQjkhjhrerTTTytuj']

由于你没有指定输出格式,我只是把它放在一个列表中。