::-- ZoomQuiet [2008-03-19 10:06:34]
Contents
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的话正则是pattern = "(.*)(\')([^\']+)(\'\.split\(\'\|\'\),0,{}\)\))\t+$"
而用re.findall的话pattern = "\'([^\']+)\'\.split\(\'\|\'\),0,{}\)\)\t*$"
少了个.* 而这个正是杀手
也可能是re.sub用的不熟 绕了远