用户登录
用户注册

分享至

每日10行代码91:正则表达式的前瞻模式应用

  • 作者: 温柔男神帅帅哒
  • 来源: 51数据库
  • 2021-07-28

今天想处理字符串相似度时,遇到一个实际问题:
假如一个公司的名字为 “武汉市中国石油武汉分公司” ,如果想把武汉替换为武汉市,直接替换的话会把第一个武汉也替换了,但我只想把后面一个武汉替换成武汉市,于是了解到了正则表达式的前瞻模式。所谓的前瞻模式正是解决这个问题的,比如想匹配武汉一词,但只想匹配后面不是“市”的武汉。也就是说前瞻模式会往后多看几个词,看是否匹配正则表达式。
为什么前瞻模式是往后看?
因为正则表达式的扫描是从左往右扫描的,对于扫描来说,未扫描的部分是前,扫描过的是后。但是对于整个文本来说就是开头是前,结尾是后。

import re

s = "武汉市中国石油武汉分公司"
pat = r'武汉(?!市)'

tt = re.search(pat,s)
print(tt.group())

aa = re.sub(pat,'武汉市',s)
print(aa)

‘武汉(?!市)’ 中 (?!市)的意思就是匹配后面不是市的武汉。

软件
前端设计
程序设计
Java相关