::-- ZoomQuiet [2008-03-19 10:06:34]

CPUG联盟::

CPUG::门户plone

BPUG

SPUG

ZPUG

SpreadPython Python宣传

1. 如何从后向前匹配正则?

{{{Mr Shore <[email protected]> reply-to [email protected], to [email protected], date Wed, Mar 19, 2008 at 3:37 PM subject [CPyUG:/] Re: 如何指定正则匹配从后往前? }}} 算了 直接贴代码了 很简单的东西 越说越糊涂了

   1 import time
   2 import re
   3 import os
   4 import stat
   5 #pattern = "(.*),\'([^,]+)\'\.split\(\'\|\'\),0,{}\)\)"
   6 #pattern = "(.*)(\')([^\']+)(\'\.split\(\'\|\'\),0,{}\)\))\t+$"
   7 pattern = "\'([^\']+)\'\.split\(\'\|\'\),0,{}\)\)\t*$"
   8 regex = re.compile(pattern, re.DOTALL|re.VERBOSE|re.IGNORECASE)
   9 
  10 
  11 def mapper(match):
  12     tmp = ''
  13 
  14     if 'IRN' in match.group(3):
  15         tmp = match.group(3).replace('IRN','test')
  16     else:
  17         tmp = match.group(3)
  18     return "%s%s%s%s" %(match.group(1), match.group(2), tmp, match.group(4))
  19 
  20 
  21 
  22 s = open(r'D:/work/IR/python/compressjs/files.txt').read().split('\n')
  23 p = r'D:/work/IR/php/src'
  24 r = []
  25 
  26 start = time.time()
  27 for each in s:
  28     print each
  29     fp = p + each
  30     ss = open(fp).read()
  31     ssl = len(ss)
  32     #ss = regex.sub(mapper,ss)
  33     ss_sub = regex.findall(ss)
  34     if len(ss_sub) == 0:
  35         continue
  36     ss_sub = ss_sub[0]
  37     l = len(ss_sub)
  38     post = ss_sub.replace('IRN','test')
  39     ss_sub = ss[:ssl - l -2 - len("'.split('|'),0,{}))")] + "'" + post + "'.split('|'),0,{}))"
  40    
  41     print ss_sub
  42     #sos.chmod(fp,stat.S_IWRITE)
  43     #file(fp,'w').write(ss)
  44     #r.append(ss)
  45 print '%s' %(str(time.time() - start),)
  46 
  47 """
  48 s = open(r'D:/work/IR/php/src/Client/Javascript/Body_min.js').read()
  49 r = regex.sub(mapper,s)
  50 """

1.1. 反馈

是这样 最后没用re.sub,而是用了re.findall

也可能是re.sub用的不熟 绕了远

MiscItems/2008-03-19 (last edited 2009-12-25 07:09:18 by localhost)