正则表达式捕获与替换

一、GVIM

需要注意的是在GVIM中,捕获组的括号需要加转义的反斜杠。

二、python

import re
mystr =  '柠檬酸渣(自提),潍坊华电一期煤灰(带运费),碳酸钙(带运费),山水熟料(自提)'
pt = r'[((](.)(.*?)[))]'
result = re.sub(pt, r'#\g<1>', mystr)
print(result)
柠檬酸渣#自,潍坊华电一期煤灰#带,碳酸钙#带,山水熟料#自

三、正则表达式断言

# 正则表达式的断言:
# 前正断言: x(?=y),意思是“搜索x,但前提是后面是y时才进行匹配”。例如 str = "1 turkey costs 30€", re.findall(r'\d+(?=€)',str),结果为30;
# 更复杂一些x(?=y)(?=z)表示:1、寻找x;2、检查y是否紧跟在x后(如果不是则跳过);3、检查z是否也紧跟在x之后(如果不是也跳过);4、如果两个都通过了,则x是匹配的;5、这种情况只有在y模式和z模式不互斥的情况下才可行。
# 例如re.findall(r'\d+(?=\s)(?=.*30)',str)表示查找后面跟着空格的、并且有30在它之后的某个地方的\d+,结果为1
# 前负断言: x(?!y),意思是“搜索x,但前提是后面没有y”。例如 str = "1 turkey costs 30€", re.findall(r'\d+\b(?!€)',str),结果为1;
# 更复杂一些x(?!y)(?!z)表示:1、寻找x;2、检查y不在其后;3、检查z也不是其后;
# 例如re.findall(r'\d+\b(?!€)(?!.*30)',"1 turkey costs 30€ more then 20"),结果为20;
# 后正断言:(?<=y)x,意思是“搜索x,但前提是前面是y时才匹配”
# 后负断言:(?<!y)x,意思是“搜索x,前提是前面不是y时才匹配”
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值