以下是我创建的一个简单示例。
string = 'I love sleeping. I love singing. I love dancing.'
pattern =re.compile(r'I love (\w+)\.')
我想用re.sub。替换(\ w +)部分 这个问题分为两部分:
我想替换(\ w +),而不必求助于群组 捕获文本的其余部分。
所以我不想做类似的事情:
pattern =re.compile(r'(I) (love) (\w+)\.')
re.sub(pattern, r'/1 /2 swimming', string)
因为在处理大量文本时这可能是不可靠的 可选组。
第二部分:
因为我将有三个匹配,是否可以输入一个带有re.sub的列表,该列表将遍历每个匹配的列表并生成子
因此。换句话说,
我希望列表['Swimming, Eating, Jogging']
中的每个项目都能与之同步
匹配,(比如方法zip)并进行替换。
所以输出应该是这样的(甚至单个总输出也没关系:
'I love Swimming'
'I love Eating'
'I love Jogging'
答案 0 :(得分:4)
您可以使用基于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.'