## page was renamed from MicroProj/2008-03-19 ##language:zh #pragma section-numbers on ::-- ZoomQuiet [<>] <> ## 默许导航,请保留 <> = 如何从后向前匹配正则? = {{{Mr Shore reply-to python-cn@googlegroups.com, to python-cn@googlegroups.com, date Wed, Mar 19, 2008 at 3:37 PM subject [CPyUG:/] Re: 如何指定正则匹配从后往前? }}} 算了 直接贴代码了 很简单的东西 越说越糊涂了 {{{#!python import time import re import os import stat #pattern = "(.*),\'([^,]+)\'\.split\(\'\|\'\),0,{}\)\)" #pattern = "(.*)(\')([^\']+)(\'\.split\(\'\|\'\),0,{}\)\))\t+$" pattern = "\'([^\']+)\'\.split\(\'\|\'\),0,{}\)\)\t*$" regex = re.compile(pattern, re.DOTALL|re.VERBOSE|re.IGNORECASE) def mapper(match): tmp = '' if 'IRN' in match.group(3): tmp = match.group(3).replace('IRN','test') else: tmp = match.group(3) return "%s%s%s%s" %(match.group(1), match.group(2), tmp, match.group(4)) s = open(r'D:/work/IR/python/compressjs/files.txt').read().split('\n') p = r'D:/work/IR/php/src' r = [] start = time.time() for each in s: print each fp = p + each ss = open(fp).read() ssl = len(ss) #ss = regex.sub(mapper,ss) ss_sub = regex.findall(ss) if len(ss_sub) == 0: continue ss_sub = ss_sub[0] l = len(ss_sub) post = ss_sub.replace('IRN','test') ss_sub = ss[:ssl - l -2 - len("'.split('|'),0,{}))")] + "'" + post + "'.split('|'),0,{}))" print ss_sub #sos.chmod(fp,stat.S_IWRITE) #file(fp,'w').write(ss) #r.append(ss) print '%s' %(str(time.time() - start),) """ s = open(r'D:/work/IR/php/src/Client/Javascript/Body_min.js').read() r = regex.sub(mapper,s) """ }}} == 反馈 == 是这样 最后没用re.sub,而是用了re.findall * 用re.sub的话正则是`pattern = "(.*)(\')([^\']+)(\'\.split\(\'\|\'\),0,{}\)\))\t+$"` * 而用re.findall的话`pattern = "\'([^\']+)\'\.split\(\'\|\'\),0,{}\)\)\t*$"` * 少了个`.*` 而这个正是杀手 也可能是re.sub用的不熟 绕了远