Re: StringCases
- To: mathgroup at smc.vnet.net
- Subject: [mg56915] Re: [mg56903] StringCases
- From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
- Date: Tue, 10 May 2005 03:42:17 -0400 (EDT)
- References: <200505090546.BAA13918@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
On 9 May 2005, at 14:46, Maxim wrote:
> It seems that the string matching functions don't handle patterns in
> exactly the same way as the ordinary pattern matching Mathematica
> functions:
>
> In[1]:= StringCases["ab", s_ /; s === "a" :> s]
>
> Out[1]= {"a"}
>
> In[2]:= StringCases["ab", s_ :> s /; s === "a"]
>
> Out[2]= {"a" /; "a" === "a", "b" /; "b" === "a"}
>
> I think that it isn't mentioned anywhere in the documentation that
> StringCases/StringReplace don't understand the conditions on the
> right-hand side of the rule.
I don't find it very surprising since over the years I have repeatedly
heard form "well informed sources" that one should place conditions as
close as possible to the pattern that they apply to and that
conditions on the right are supported only for reasons of compatibility
with early versions of Mathematica (I think in version 1 you had to put
conditions on the right). This is actually stated in more than one book
on Mathematica although probably not in the documentation.
>
> In[3]:= StringCases["abcd", (s_ ~~ "b") | (s_ ~~ "d")]
>
> Out[3]= {"ab"}
>
> This one is in plain disagreement with the standard pattern matching
> rules, as in e.g. Cases[{f[a, b], f[c, d]}, f[s_, b] | f[s_, d]].
But this works
StringCases["abcd", (s_ ~~ "b"|"d") ]
{ab,cd}
:-)
Andrzej Kozlowski
- References:
- StringCases
- From: Maxim <ab_def@prontomail.com>
- StringCases