Re: a conflicting StringReplace

*To*: mathgroup at smc.vnet.net*Subject*: [mg56320] Re: a conflicting StringReplace*From*: Marcus Stollsteimer <marcus314 at yahoo.com>*Date*: Fri, 22 Apr 2005 06:22:44 -0400 (EDT)*Organization*: Comp.Center (RUS), U of Stuttgart, FRG*References*: <d47tic$578$1@smc.vnet.net>*Sender*: owner-wri-mathgroup at wolfram.com

Hui Fang wrote: > No problem on those. Now a student tried the following: > In[3] StringReplace["abc", {"ab"->"AB", "bc"->"BC"}] > Out[3] ABc > > Now he asked me why only "ab" is replaced. I said this is because > there is a conflict because both "ab" and "bc" contains "b". So > Mathematica will choose the first replacement. I also told him if he > changes the order, he will get aBC. Now: > In[4] StringReplace["abc", {"bc"->"BC","ab"->"AB"}] > Out[4] ABc > > This is the part I don't understand. Does Mathematica treat those > rules in their canonical order (since "ab" is before "bc" in > canonical order.), or in their written order? StringReplace first tries to apply the rules at position 1 of the string, then goes on to the next character. Therefore always "ab" will be replaced. From the help for StringReplace[]: "StringReplace goes through a string, testing substrings that start at each successive character position. On each substring, it tries in turn each of the transformation rules you have specified. If any of the rules apply, it replaces the substring, then continues to go through the string, starting at the character position after the end of the substring." Regards, Marcus -- Time enough to think of the future when you havent any future to think of. -- George Bernard Shaw