[EMAIL PROTECTED] wrote:
'PERMX' @PERMX1 1 34 1 20 1 6 /
...
'PERMX' @PERMX10 1 34 21 41 29 34 /
...
I would like to replace all the occurrencies of the "keywords" (beginning
with the @ (AT) symbol) with some floating point value. As an example, this
is what I do:
# Find All Keywords Starting with @ (AT)
regex = re.compile("[EMAIL PROTECTED]", re.IGNORECASE)
You don't need the [, \ or ] around the "@" as it is
not a special character... (but that's not your problem here).
keywords = regex.findall(onread)
Here you get a list, in order, of all the matches, including
these: "@PERMX1" and "@PERMX10"
# Try To Replace The With Floats
for keys in keywords:
onread = string.replace(onread, keys, str(float(pars)))
Here you iterate through the list, replacing *all*
occurrences of each of them, one at a time, in the
full string.
Now imagine what happens to things like "@PERMX10" in the
full string when you are replacing "@PERMX1"....
Now, I you try to run this little script, you will see that for keywords
starting from "@PERMX10", the replaced values are WRONG. I don't know why,
Python replace only the "@PERMX1" leaving out the last char of the keyword
(that are 0, 1, 2, 3, 4, 5, 6 ). These values are left in the file and I
don't get the expected result.
Does anyone have an explanation? What am I doing wrong?
Basically, you are replacing things in the string one by one without
taking into account the fact that some of those things contain
others of those things.
Looking into "re.sub" might help, although in this case you
could solve the problem by doing one of several other things.
The simplest one that comes to mind is to sort the list of
keywords in reverse order by length of string, so that you
replace the longest items first.
-Peter
--
http://mail.python.org/mailman/listinfo/python-list