## 17786Re: Dollars and cents

Expand Messages
• Apr 25, 2008
• 0 Attachment
You bet!

In the find expression (what's left of >>)

\b means "boundary" and matches the outer edges of any alpha numeric
sequence. It is close (but not exactly like) to the equation
^|\$|[^1-0a-zA-Z_]

(If your regular expression understanding is not yet up to
understanding that, just remember, edges of words)

So, by wrapping a regular expression in \b on both sides we force
whole word matches (or in this case, whole number sequences.)

So, starting the explanation again:
\b - beginning of word
( - What's about to come, take note of
\d - a single decimal character
) - stop taking note - from ( to ) we have our first "match" which in
the output gets assigned to the variable \$1
c - this is a literal character because it doesn't have a backslash
with it. So, we are telling it to find the letter "c". If we had the
"c" in the parenthesis it would be a part of the \$1 variable, which
means it would be copied to the output and we don't want that. That's
why it's outside the parenthesis.
\b - end of word (so we don't match something like 2c2 for example. Or
2cell or anything else that's not one digit and a letter "c".)

Then, in the output (the area to the right of >>) we have to tell it
what to do with what we found. Remember we saved the number as \$1.

\\$ - because the dollar sign is usually special to regular
expressions, we have to tell it that we really want a dollar sign. So
it has a backslash before it which means "this really is a dollar sign
that I want"
0.0 - because we matched one digit numbers only, we are putting in the
dollars as 0, a decimal point, and the dimes as zero.
\$1 - we captured one digit and it goes here. Remember, \$1 is our variable.

Thus, let's say the number was 6c

We captured the 6. The "c" gets discarded because it was a part of the
regular expression find but was outside of parenthesis.

Then we inserted "\$0.0" and then "6" which becomes "\$0.06"

Now, there's no way to tell regular expressions to formulate numbers
with leading zeroes, which would be convenient, so we have to write
regular expressions for each case where there would be a leading zero.

So, the second expression is the same with two changes.

First, it matches two digits, not one. (That's the \d\d sequence.)

Since we are finding two digits, it doesn't make sense to count zero
dimes and then insert a two digit number, so the output only specifies
the whole dollar portion (which is 0).

For the record, \d\d is functionally equivalent to \d{2} but when
matching two to three characters I tend to just specify it like I did.
I think it makes it more readable. But neither is more or less correct.

Now, I could have ended there and fully answered your request, but I
felt that in the event you had a three digit cents specification
somewhere that you would want it changed (not likely, but possible) I
finished with the last one too. What it does is find anything that is
three or greater digits. It saves the last two digits to \$2 and
everything before that to \$1.

\b(\d+)(\d\d)c\b

Word boundary, Any number of digits (save to \$1), two digits (save to
\$2), the letter "c", word boundary.

Then, in the output, since now we have a count of the number of
dollars (in the sequence 1234c that would be 12 dollars) we don't
specify 0 but rather what we discovered.

And there you have it!

--Keith

(Admins, am I allowed to make a product recommendation that's a cheat
sheet for regular expressions?)

--- In ntb-clips@yahoogroups.com, "ehofferino" <eyhoffmann@...> wrote:
>
> Thanks Keith!
>
> I would love an explanation. Teach a man to fish...
>
> --- In ntb-clips@yahoogroups.com, "dracorat" <dracorat@> wrote:
> >
> > In a new clip, use:
> >
> > ^!REPLACE "\b(\d)c\b" >> "\\$0.0\$1" AWRS
> > ^!REPLACE "\b(\d\d)c\b" >> "\\$0.\$1" AWRS
> > ^!REPLACE "\b(\d+)(\d\d)c\b" >> "\\$\$1.\$2" AWRS
> >
> > If you want me to explain the regular expressions, just say the word.
> > --Keith
> >
> > --- In ntb-clips@yahoogroups.com, "ehofferino" <eyhoffmann@> wrote:
> > >
> > > Hi guys,
> > >
> > > I'm looking to write a simple clip that searches through a block of
> > > text and replaces all instances of monetary notation that look like
> > this:
> > >
> > > 44c
> > >
> > > with this
> > >
> > > \$0.44.
> > >
> > > Here's what the block might look like before changes:
• Show all 7 messages in this topic