Search code examples
pythonregexfloating-pointdata-extraction

How to extract a floating number from a string


I have a number of strings similar to Current Level: 13.4 db. and I would like to extract just the floating point number. I say floating and not decimal as it's sometimes whole. Can RegEx do this or is there a better way?


Solution

  • If your float is always expressed in decimal notation something like

    >>> import re
    >>> re.findall("\d+\.\d+", "Current Level: 13.4db.")
    ['13.4']
    

    may suffice.

    A more robust version would be:

    >>> re.findall(r"[-+]?(?:\d*\.*\d+)", "Current Level: -13.2db or 14.2 or 3")
    ['-13.2', '14.2', '3']
    

    If you want to validate user input, you could alternatively also check for a float by stepping to it directly:

    user_input = "Current Level: 1e100 db"
    for token in user_input.split():
        try:
            # if this succeeds, you have your (first) float
            print(float(token), "is a float")
        except ValueError:
            print(token, "is something else")
    
    # => Would print ...
    #
    # Current is something else
    # Level: is something else
    # 1e+100 is a float
    # db is something else