一、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时才匹配”