help learning "re"
Fredrik Lundh
effbot at telia.com
Thu Apr 20 04:33:07 EDT 2000
Pete J Shinners <pete at visionart.com> wrote:
> i'm trying to get the hang of these regular expression
>
> i'm trying to write a function that takes two filenames
> and copies one to the other. while it is copying i want
> it to scan for any environment variable names and substitute
> the expanded value.
os.path.expandvars(name)
> sounded like a fabulous time to learn the regexp.
> sadly it doesn't work. the code runs, but none of the
> variables are found or substituted
>
> here's what i expected to work
> ----------------------------------------------
> import os, re
>
>
> def subvar(regfind):
> "callback for regex substitution"
> var = regfind.group(0)[1:]
> print 'REGEX found var:', var #temp debugging. never gets here
> return os.environ.get(var, '$'+var)
>
>
> def smartcopy(source, dest):
> "copies files. substites env.variables with values"
> srcfile = open(source, 'r')
> dstfile = open(dest, 'w')
> regexp = re.compile(r"\$[0-9A-Z_]+")
> while 1:
> line = srcfile.readline()
> if not line: break
> regexp.sub(subvar, line)
regexp.sub returns the new value, it doesn't modify
line in place.
> dstfile.write(line)
>
> -----------------------------------------------
> surely this can be done correctly, but how?
the only bug I can spot is the regexp.sub return value. the
expression and the substitution function works just fine for
me...
(try adding "print regexp.sub(subvar, '$HOME')" just after
the re.compile to see what I mean)
</F>
More information about the Python-list
mailing list