MathGroup Archive 2005

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

Search the Archive

Re: a conflicting StringReplace


Thanks, Wolf. Your experiment is very convincing.

Hui

Wolf, Hartmut wrote:

>The behavior is explained in 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. 
>
>
>What is not quite clear (to me) from that explanation is the meaning of
>"each substring": does this just mean the rest of the string starting at
>current position, or is each substring of different length (starting
>there) considered as different (such that the next rule is tried first,
>before we further run down the string? An experiment shows, that the
>first assumtion applies (and this gives the algorithm that performs
>better)
>
>
>StringReplace goes through a string, testing substrings that start at
>each successive character position. 
>
>-- starting at position of "a" in string "abc" 
>
>
>On each substring, 
>
>-- at starting position it's: "abc" 
>
>it [StringReplace] tries in turn each of the transformation rules you
>have specified. 
>
>-- so first it tries "b" of "bc" on "a" of "abc" --> fail, try next rule
>-- then tries "a" of "ab" on "a" of "abc" --> interesting, go on
>-- tries "b" of "ab" on "b" of "abc" --> interesting, go on
>-- pattern is exhausted, such we have --> success of pattern on
>substring "ab" of "abc"
>
>If any of the rules apply, it replaces the substring, 
>
>-- so here "ab" of "abc" becomes "AB", i.e the string becomes
>
>"ABc"
>
>then continues to go through the string, starting at the character
>position after the end of the substring. 
>
>-- Substring considered next is "c" of "abc" (or "ABc", replaced part is
>not considered again)
>
>-- so now we compare "b" of "bc" on "c" --> fail, try next rule
>-- try "a" of "ab" on "c" --> fail, no more rule, advance position
>
>-- but string is exhausted
>
>-- so the result is "ABc"
>
>
>
>
>Here are two more examples:
>
>
>In[29]:= StringReplace["abc", {"ab" -> "ab", "bc" -> "bc",
>            "a" -> "1", "b" -> "2", "c" -> "3"}]
>Out[29]= "ab3"
>
>here rule "a" -> "1" is masked by pattern "ab" which matches first, 
>"bc" and "b" cannot match, as neither substring "bc" nor "b" are part of
>substring "c" left over from "abc" after substitution "ab" -> "ab".
>
>
>
>In[31]:= StringReplace["abc", {"a" -> "1", "ab" -> "ab",
>            "bc" -> "bc", "b" -> "2", "c" -> "3"}]
>Out[31]= "1bc"
>
>here rule "a" -> "1" matches first, and substitution takes place. 
>For rest of string "bc", from "abc", patterns "a" and "ab" will never
>match, "bc" -> "bc" matches first, 
>and such masks  rule "c" -> "3"
>
>
>
>
>--
>Hartmut Wolf
>
>
>  
>


  • Prev by Date: Re: Lists of equations. Again
  • 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