String Replace only if whole word?

Michael Yanowitz m.yanowitz at kearfott.com
Fri Nov 17 10:43:10 EST 2006


>Michael Yanowitz wrote:
>> Hello:
>>
>>   I am hoping someone knows if there is an easier way to do this or
someone
>> already implemented something that does this, rather than reinventing the
>> wheel:
>>   I have been using the string.replace(from_string, to_string,
len(string))
>> to replace names in a file with their IP address.
>>   For example, I have definitions file, that looks something like:
>> 10.1.3.4   LANDING_GEAR
>> 20.11.222.4   ALTIMETER_100
>> 172.18.50.138 SIB
>> 172.18.50.138 LAPTOP
>> 172.18.51.32  WIN2000
>> 127.0.0.1 LOCALHOST
>>
>>   and I have a text file (a Python script) that has these names in the
file.
>> In most cases the string.replace() command works great. But there is one
>> instance which it fails:
>> Suppose I had in the file:
>>  if (LAPTOP_IS_UP()):
>>    It would replace the string with:
>>  if ("172.18.50.138"_IS_UP()):
>>
>>    Is there any easy way to avoid this, only replace if a whole word
>> matches?
>> I probably need something which determines when a word ends, and I will
>> define
>>  a word as containing only 'A'-'Z','a'-'z','0'-'9','_' . As long as the
>> string
>> contains more of the word digits after the match, don't replace?
>>
>> Thanks in advance:
>> Michael Yanowitz
>
>You need regular expressions for this. Use the re module.
>http://docs.python.org/lib/module-re.html
>
>from the docs:
>
>re.sub(pattern, repl, string[, count])
>Return the string obtained by replacing the leftmost non-overlapping
>occurrences of pattern in string by the replacement repl.
>
>Your pattern would be "[^A-Za-z0-9_]word[^A-Za-z0-9_]"
>
>[^xy] is approximately not in ('x', 'y')
>
>--
>Juho Schultz


Thanks.
  This works great except for one thing:

The character after the replacement is deleted, so that if I have
     send_data (LAPTOP, test_string)
    it would replace it with:
     send_data (10.1.3.4 test_string)
  (ignoring that the 10.1.3.4 is not quoted). The comma is missing.

Thanks in advance:
Michael Yanowitz





More information about the Python-list mailing list