Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2005
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*November
*December
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 2005

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

Search the Archive

Re: a conflicting StringReplace

  • To: mathgroup at smc.vnet.net
  • Subject: [mg56315] Re: a conflicting StringReplace
  • From: Torsten Coym <torsten.coym at eas.iis.fraunhofer.de>
  • Date: Fri, 22 Apr 2005 06:22:39 -0400 (EDT)
  • References: <d47tic$578$1@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

According to the help "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."


Since in "abc" the first matching occurence is "ab" it will be replaced 
immediately by "AB", so that "bc" can never match.

However, changing the order of the string will replace "bc"->"BC".

In[46]:=
StringReplace["bca", {"bc" -> "BC", "ab" -> "AB"}]

Out[46]=
"BCa"

Torsten

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      
> 


  • Prev by Date: Re: a conflicting StringReplace
  • Next by Date: Re: a conflicting StringReplace
  • Previous by thread: Re: a conflicting StringReplace
  • Next by thread: Re: a conflicting StringReplace