You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python正则表达式:保留指定组及模式前后缀的替换方法

解决方案

要实现你的预期输出zxc wololo !zxc,只需要在repl参数里明确写出要保留的前缀、第一组内容、感叹号和后缀即可。具体代码如下:

import re
p = 'zxc(.*?)!(.*?)zxc'
s = 'zxc wololo ! ololo zxc'
result = re.sub(pattern=p, repl=r"zxc\1!zxc", string=s)
print(result)  # 输出: zxc wololo !zxc

原理说明

你的正则表达式zxc(.*?)!(.*?)zxc会匹配整个目标字符串,其中:

  • zxc是需要保留的前后缀匹配项
  • \1对应第一捕获组(.*?),也就是' wololo '(zxc到!之间的内容)
  • !是你想要保留的固定分隔字符
  • 第二捕获组(.*?)对应的' ololo '是需要剔除的内容

通过在替换字符串里显式组合要保留的固定部分和捕获组引用,就能精准保留所需内容,同时丢弃不需要的捕获组内容。

多捕获组的通用处理方式

如果存在多个捕获组,你只需要在repl里按照需求组合固定保留的字符和**对应捕获组的引用(\1、\2、\3...)**即可。比如有3个捕获组时,若想保留前缀、\1、固定分隔符、\3、后缀,替换字符串就可以写成r"前缀\1固定内容\3后缀"

举个实际例子:

p = 'abc(.*?)def(.*?)ghi(.*?)jkl'
s = 'abc hello def foo ghi bar jkl'
# 保留abc、hello、def、bar、jkl,丢弃中间的foo
result = re.sub(p, r"abc\1def\3jkl", s)
print(result)  # 输出: abc hello def bar jkl

内容的提问来源于stack exchange,提问作者Yuriy Leonov

火山引擎 最新活动