下面只是我创建的一个简单示例。
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)
您可以使用基于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)
| 归档时间: |
|
| 查看次数: |
1259 次 |
| 最近记录: |