MathGroup Archive 2005

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: a conflicting StringReplace

  • To: mathgroup at
  • Subject: [mg56336] Re: [mg56306] a conflicting StringReplace
  • From: Igor Antonio <igora at>
  • Date: Fri, 22 Apr 2005 06:23:21 -0400 (EDT)
  • References: <>
  • Reply-to: igora at
  • Sender: owner-wri-mathgroup at

Hui Fang wrote:
> I was teaching Mathematica in a college. In the class I was showing them 
> some built-in functions about strings. Since this is not a very 
> important issue, I didn't spend much time on each function. When I show 
> them StringReplace, I gave them the following examples:
> In[1]    StringReplace["abc",{"ab"->"AB"}]
> Out[1]   ABc
> In[2]   StringReplace["abc", {"bc"->"BC"}]
> Out[2]   aBC
> 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?
> Thanks a lot!
> Hui Fang      


This behavior is correct.  This excerpt is from the documentation:

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.

It will test all of the rules in the list before moving on to the next 
character in the string.


Igor Antonio
Wolfram Research, Inc.

To email me personally, remove the dash.

  • Prev by Date: Re: a conflicting StringReplace
  • Next by Date: Re: Re: (x-y) DiracDelta[x-y] does not simplify to 0
  • Previous by thread: Re: a conflicting StringReplace
  • Next by thread: Re: a conflicting StringReplace