Re: Problem with nested StringReplace[]
- To: mathgroup at smc.vnet.net
- Subject: [mg101537] Re: Problem with nested StringReplace[]
- From: pfalloon <pfalloon at gmail.com>
- Date: Thu, 9 Jul 2009 01:59:52 -0400 (EDT)
- References: <h2i4pn$939$1@smc.vnet.net>
On Jul 2, 9:13 pm, dnquark <dnqu... at gmail.com> wrote: > I am trying to match a substring using a regular expression, and right > away apply some replacement rules to that substring. Suppose I want > to match a substring "bar" and right away replace it using the rule > {"bar" -> "baz"}. The following doesn't work: expected: "baz", > actual: "bar" > StringReplace[ > "foobar", > RegularExpression["foo(bar)"] -> > StringReplace["$1", {"bar" -> "baz"}]] > > Replacing the first rule with a delayed rule (:>) produces the > expected result, but I cannot use the delayed rule -- it produces side > effects in my code. Is there a reason that the regular rule -> > doesn't work in this case?.. The problem with using Rule (->) is that the right hand side is evaluated immediately. In this case, In[609]:= StringReplace["$1", {"bar" -> "baz"}] Out[609]= "$1" So all you're left with is "$1", which will return "bar". This is actually quite a typical example of where one would normally use RuleDelayed (:>), so maybe it would be worth looking at the "side effects" which it is producing and see whether these can be avoided? Cheers, Peter.