Re: a conflicting StringReplace
- To: mathgroup at smc.vnet.net
- Subject: [mg56367] Re: [mg56306] a conflicting StringReplace
- From: Michael_Harre at resimac.com.au
- Date: Fri, 22 Apr 2005 06:25:50 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
Hi Hui,
Mathematica looks at the first element of the initial string and decides
whether or not it is the beginning of a string that matches the
replacement rule, so
In[1] StringReplace["abc",{"ab"->"AB"}]
Out[1] ABc
found "ab" in the initial string matches "ab" in the replacement rule
and so replaces "ab" with "AB", then Mathematica looks at the next
letter after the string that has just been substituted in. So in your
students example, after the first string is replaced the next element to
be looked at is "c", not "b". An example might help here:
In[2] StringReplace["abc", {"ab" -> "Q", "bc" -> "ED"}]
Out[2] Qc
because "bc" does not match anything in the remainder of the string
(which is just "c"), However:
In[3] StringReplace["abc", {"ab" -> "Q", "c" -> "ED"}]
Out[3] QED
Mike.
-----Original Message-----
From: Hui Fang [mailto:fangh73 at xmu.edu.cn]
To: mathgroup at smc.vnet.net
Subject: [mg56367] [mg56306] a conflicting StringReplace
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
***Confidential Communication***
This message is directed to the addressee. If you are not the intended recipient, any use, disclosure or copying of the information contained herein is unauthorised. If you have received this message in error, please phone 02 9248 0300. Confidentiality and legal privilege are not waived or lost through mistaken delivery to you. Views expressed in this message are those of the individual sender, and may not necessarily represent the views of the Resimac Limited. There is no warranty that this message is error or virus free.
***Unsubscribe Facility***
You may unsubscribe to this message by replying to the sender's email address with the subject heading "UNSUBSCRIBE". Please note that by doing so, you may prevent further electronic communication between us that will undermine any commercial relationship which may exist.