MathGroup Archive 2002

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

Search the Archive

Re: Pattern matching

  • To: mathgroup at
  • Subject: [mg33940] Re: Pattern matching
  • From: Janus Wesenberg <nil at>
  • Date: Wed, 24 Apr 2002 01:21:47 -0400 (EDT)
  • References: <aa3fq4$7tv$>
  • Sender: owner-wri-mathgroup at

John Leary wrote:
> Greetings
> Can you help me please - there must be a simple solution to this problem, 
> but I can't find it.
>  From a list of character strings and a list of templates,  I need to 
> produce a list of all strings that match any of the templates.  For example:
> listData={"18K0F3C--" , "2K40GXX--" , "400HGXX--" , "5M00G1F--" , "960KG1D--"}
> listTemplates={"???H?????" , "???K?????"}
> result={"400HGXX--","960KG1D--"}
> In the templates, ? is a wild-card that represents a single character.
> The data strings contain only alpha-numeric characters and hyphens - no 
> other characters.
> There are no special requirements for the result:  duplication and random 
> order are acceptable.

Here's one way to do it: implement a matchTemplatesQ function that 
yields true if any of the templates is matched.
Note that matchTemplatesQ depends on listTemplates which is not given as 
an argument -- Personally I don't have a problem with polution of the 
global namespace, but you'll probably get some followup on this...

matchTemplatesQ[s_String] :=
   Or @@ ((MatchQ[Characters[s], Characters[#] /. "?" -> _]) &  /@
Select[listData, matchTemplatesQ]

{"400HGXX--", "960KG1D--"}

The mystical @@, /@ and (  #  )&  stuff is just a shorthand for Apply, 
Map and Function, which you might want to look up in help.

Hope this helps
Janus Wesenberg              _||_
Ph.D. Student at Quantop    (    )    jaw@^^^^^^^^^
                              \  /

  • Prev by Date: RE: Why these graphs differ?
  • Next by Date: RE: Re: Closed Polygons from List
  • Previous by thread: Pattern matching
  • Next by thread: Re: Pattern matching