Re: Extract substrings using metacharacters
- To: mathgroup at smc.vnet.net
- Subject: [mg48534] Re: Extract substrings using metacharacters
- From: Paul Abbott <paul at physics.uwa.edu.au>
- Date: Fri, 4 Jun 2004 04:50:15 -0400 (EDT)
- Organization: The University of Western Australia
- References: <c99dks$k5f$1@smc.vnet.net> <c9ha3q$14l$1@smc.vnet.net> <c9k3h7$fcu$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
In article <c9k3h7$fcu$1 at smc.vnet.net>,
Marcus Stollsteimer <marcus314 at yahoo.com> wrote:
> Paul Abbott wrote:
> > Since string-matching is somewhat limited, here is another way using
> > "ordinary" pattern-matching, replacing the meta-characters "*" and "@"
> > by their corresponding symbolic patterns:
> >
> > StringPatternTake[str_String, pat_String] :=
> > If[StringMatchQ[str, pat], Characters[str] /.
> > (Characters[pat] /. {"*" -> x___, "@" -> x__} ) :>
> > StringJoin[x], str]
>
> Paul, thanks a lot!
>
> your solutions work perfectly, I especially like the second version,
> which has the advantage that I can use the same pattern string
> both for FileNames[] and StringPatternTake[]. :)
>
> What I don't understand is why you treat "*" and "@" differently,
> shouldn't they both match 0 or more times, therefore in both cases
> use x___ (3 underscores)?
No. Have a read of Section 2.8.3 of the Mathematica book, or go to
http://documents.wolfram.com/v5/TheMathematicaBook/PrinciplesOfMathematic
a/StringsAndCharacters/2.8.3.html
> And I suggest that in the case that there is no match at all,
> the result should be an empty string rather than the input string.
Agreed.
> For my case it is not necessary, but wouldn't it be nice to
> generalize this function for patterns with multiple metacharacters,
> like "a*b*" (which should return a list of matched substrings)?
> Also, the metacharacter for the literal "*" (\*) could be implemented.
>
> I'll think about it when I have some spare time, but I figure
> it's probably not that easy... :)
I expect that someone has already written general tools for such
operations ...
Cheers,
Paul
--
Paul Abbott Phone: +61 8 9380 2734
School of Physics, M013 Fax: +61 8 9380 1014
The University of Western Australia (CRICOS Provider No 00126G)
35 Stirling Highway
Crawley WA 6009 mailto:paul at physics.uwa.edu.au
AUSTRALIA http://physics.uwa.edu.au/~paul