Prev: help with DictionaryLookup[] and a type of regular expression
Next: and a type of regular expression
From: Leonid Shifrin on 10 May 2010 06:38 Hi Michael, I don't know how to do this using only regular expressions, but you can also use Mathematica's string-matching syntax. Here is one way: In[1]:= words = DictionaryLookup[{"English", "*"}]; In[2]:= Union@ Flatten(a)StringCases[ words, ("d" ~~ LetterCharacter ~~ (x : LetterCharacter) ~~ (y : LetterCharacter) ~~ LetterCharacter ~~ "k") /; x === y] Out[2]= {"dybbuk"} You can find it faster to first do the regexp part and then filter the resulting list of words: In[3]:= wlist = DictionaryLookup[{"English", RegularExpression["d....k"]}] Out[3]= {"damask", "debark", "debunk", "dybbuk"} In[4]:= Select[wlist, StringTake[#, {3, 3}] === StringTake[#, {4, 4}] &] Out[4]= {"dybbuk"} Both solutions are admittedly more verbose than the one which would use only regexps (assuming it exists) - may be you'll get more elegant solutions from others. Regards, Leonid On Sun, May 9, 2010 at 4:51 AM, Michael Stern <nycstern(a)gmail.com> wrote: > Is there an elegant way to do dictionary searches that match specified > kinds of character repetition? For example, to search for six letter > words that start with "d" and end with "k", where the third and fourth > letter are the same? > > Finding six letter words that start with "d" and end with "k" is easy -- > > DictionaryLookup[{"English", RegularExpression["d....k"]}] > > But how do we restrict the answer to words where the third and fourth > letters are the same? > > Thanks, > > Michael= > > |