使用re.sub和多次替换仅替换捕获的组

Moo*_*dra 5 python regex

下面只是我创建的一个简单示例。

string = 'I love sleeping. I love singing. I love dancing.'
pattern =re.compile(r'I love (\w+)\.')
Run Code Online (Sandbox Code Playgroud)

我只想用re.sub替换(\ w +)部分。
这个问题分为两个部分:

我想替换(\ w +),而不必借助组来捕获其余文本。

所以我不想做这样的事情:

pattern =re.compile(r'(I) (love) (\w+)\.')
re.sub(pattern, r'/1 /2 swimming', string)
Run Code Online (Sandbox Code Playgroud)

因为这在处理大量文本和可选组时可能不可靠。

第二部分:

由于我将有3个匹配项,因此是否可以使用re.sub馈入列表,该列表将为每个匹配项在列表中进行迭代,并相应地生成sub。换句话说,我希望列表中的每个项目都['Swimming, Eating, Jogging']与匹配项(例如zip方法)同步并进行替换。

因此输出应该是这样的(即使单个总输出也可以:

'I love Swimming'
'I love Eating'
'I love Jogging'
Run Code Online (Sandbox Code Playgroud)

anu*_*ava 5

您可以使用基于lookbehind和lookahead的正则表达式,然后使用一个lambda函数来遍历替换单词:

>>> words = ['Swimming', 'Eating', 'Jogging']
>>> pattern = re.compile(r'(?<=I love )\w+(?=\.)')
>>> print pattern.sub(lambda m: words.pop(0), string)
'I love Swimming. I love Eating. I love Jogging.'
Run Code Online (Sandbox Code Playgroud)

代码演示