使用正则表达式替换(保留部分内容不变)

正则表达式保留部分内容替换

需求:

把trim(ABC)替换成trim(replace(ABC,char(9),'    ')

需要把ABC保留不变,替换其它的。

实现:

trim\(([^).]*)\)      替换成    trim\(replace\($1,char\(9\),'    '\)

在查找的时候用括号括起来的代表一部分,在替换的时候可以用$1,$2…引用。
在这里插入图片描述

简单例子

把前面三位数字替换成 =,保留其它不变。[0-9]{3} 表示三位数字,(.*) 表示其它,用括号括起便于后面替换时引用。
在这里插入图片描述
替换完结果是 ===yiersan 除了前面 123 后面的都被括号括起来了,而且后面用 $1 引用,所以保留不变。

注意:

有些编辑器选择使用正则表达式的时候有选择正则表达式的类型。这里是Perl

### 如何在 VSCode 中使用正则表达式进行查找和替换 #### 使用全局搜索功能 为了执行复杂的文本替换,在VS Code中可利用其内置的全局搜索功能。通过按下 `Ctrl+Shift+H` 或者点击菜单栏中的 “编辑” -> “替换”,可以打开全局替换面板。 #### 输入正则表达式模式 对于特定的需求,比如只匹配某些行而不影响其他相似但不需要改动的内容,构建精确的正则表达式至关重要。例如要匹配以大写的 `SET_` 开头并含有 `_MM` 的字符串,可以使用的正则如下: ```regex ^SET_.*?_MM.* ``` 此模式会确保仅当目标字符串满足条件时才被捕获[^1]。 #### 执行查找与替换 一旦定义好了想要查找的模式,就可以输入期望替换成的新字符串。值得注意的是,如果希望保留部分原始文本,则可以在正则表达式的适当位置加入捕获组(即括号),并在替换字段中引用这些捕获到的部分。例如,将 `-zhejiang-zhangsan` 替换为 `china-zhejiang-zhangsan` 可采用以下方式实现: - 查找:`(zhejiang)-zhangsan` - 替换:`china-$1-zhangsan` 这里的 `$1` 表示第一个捕获组内的内容将会被插入到该处[^3]。 #### 应用于实际案例 针对给定的例子——`set_ABC_mm_DEF set_123_mm_MCF ABC_SET_ABC_MM_abc`,其中只有前两行应该受到影响而第三行保持不变的情况,可以通过调整上述提到的方法来达成目的。具体来说就是精心设计正则表达式以便它能够区分不同的上下文环境,并且合理运用非贪婪匹配符 (`*?`) 来最小化匹配范围,从而避免不必要的更改发生。 ```python import re text = """ set_ABC_mm_DEF set_123_mm_MCF ABC_SET_ABC_MM_abc""" pattern = r'^(?!ABC_)set_.+_mm_.+' # 排除以 'ABC_' 开始的行 replacement = lambda m: m.group().replace('set_', 'new_prefix_') result = re.sub(pattern, replacement, text, flags=re.MULTILINE) print(result) ``` 这段 Python 脚本展示了如何编写一个更具体的正则表达式以及怎样动态地修改找到的结果,以此达到预期效果。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值