in reply to Re^2: How to avoid an alphabet and integer next to it in a string?
in thread How to avoid an alphabet and integer next to it in a string?

What about this?
$formula =~ s/H\d*//g;
  • Comment on Re^3: How to avoid an alphabet and integer next to it in a string?
  • Download Code

Replies are listed 'Best First'.
Re^4: How to avoid an alphabet and integer next to it in a string?
by moritz (Cardinal) on Mar 21, 2014 at 18:20 UTC

    The Problem with s/H\d*//g is that it will also remove the H from HgS (ok,, not organic chemistry, but you get the point).

    One way to avoid that is to use a negative look-ahead:

    s/H(?![a-z])\d*//</c> <p>Or if you prefer the Unicode-y approach:</p> <code>s/H(?!\p{Ll})\d*//
      The first code says Forbidden chars again. Second one, Unicode -y approach? I am not familiar with that. Could you help me? How should the input be in an unicode -y approach?
        The first code says Forbidden chars again.
        So show the input and output, quit making us guess (and when I say 'output' I mean the new string, not the number you're trying to calculate).

        As far as which approach, don't worry about it. Just pick one (as long as it works).

      will also remove the H from HgS
      Yes, you're right, I stand corrected.

      Or simpler, H\d+. \d* will match *zero* or more digits, \d+ matches *one* or more.

      update: oh, wait, ignore me. You need to knock out the H in (eg) NaOH, which doesn't have a digit after it.

Re^4: How to avoid an alphabet and integer next to it in a string?
by piscean (Acolyte) on Mar 21, 2014 at 18:12 UTC
    Nope :( If the molecular formula entered is C6H9, the code should give an output equal to 12.01*6=72.06. After applying this, it's giving me 12.01*69=828.69