in reply to Replacing numbers using regular expression

You can simply translate digits to '#':

$_ = 123.4567890; tr/0-9/#/; print; __END__ ###.#######
The regex to match digits-dot-digits looks like, my $fixed_point_re = qr/\d*\.?\d*/; but you also have to check that there is at least one digit, with m/\d/, since the regex has to allow for zero digits on either side of the optionsl decimal point.

After Compline,
Zaxo

Replies are listed 'Best First'.
This checks there is at least one digit, among other things...
by tphyahoo (Vicar) on Dec 22, 2004 at 11:06 UTC
    I think actually zero digits on the right side of the decimal point should not be allowed.

    1234.

    isn't what I think of as a number.

    I would allow zero digits on the left side though.

    .1234

    seems ok by me. I think the 123 in

    foo123foo

    shouldn't be a number, so let's look for white space, or the beginning/end of the line before and after our match. The end check can be taken care of with lookahead (?=\s|$). Unfortunately you can't have variable length lookbehind, so (?<=\s|$) is impossible. So I just do (\s|^) and you should skip this register and take the next parenthesized group for your match.

    Anyway we want to match all of these:

    1234
    1234.1234
    .1234

    but not

    .
    1234.
    1234.1234.1234
    .1234.1234
    foo123foo
    123.foo
    foo.123
    A regex that will do that is:

    my $fixed_point_re = qr/(\s|^)((\d+(\.\d+)?)|(\.\d+))(?=\s|$)/;
    It's getting kind of hard to read, I realize, but it sits plays dead and fetches so...

    Hope this helps!

    Thomas.

      A trailing decimal point with nothing to the right customarily says that trailing zeros of an integer are significant figures,

      1230 Three significant figures
      1230. Four significant figures

      There is nothing odd or unexpected about using that notation even where it is not needed.

      After Compline,
      Zaxo

      A reply falls below the community's threshold of quality. You may see it by logging in.