Check if a String is a Number / Float in Python

This article will discuss two different ways to check if a given string contains a number or float only.

Table of contents

Use Regex to check if a string contains only a number/float in Python

In Python, the regex module provides a function regex.search(), which accepts a pattern and a string as arguments. Then it looks for the pattern in the given string. If a match is found, it returns a Match object; otherwise returns None. We will use this regex.search() function to check if a string contains a float or not. For that we will use the regex pattern “[-+]?\d*.?\d+(?:[eE][-+]?\d+)?$”. This pattern validates the following points in a string,

  • The string must start with a decimal or a symbol i.e. plus or minus.
  • After first symbol, there can be digits and then an optional dot and then again some digits.
  • The string must end with digits only.
  • Also, there can be an exponent symbol i.e. either ‘e’ or ‘E’.

Let’s create a function that will use the above-mentioned regex pattern to check if the given string contains a number or float only,

import re    

def is_number_or_float(sample_str):
    ''' Returns True if the string contains only
        number or float '''
    result = True
    if re.search("[-+]?\d*\.?\d+(?:[eE][-+]?\d+)?$", sample_str) is None:
        result = False
    return result

Now we will test this function with different types of strings to validate that it identifies the string representation of numbers and floats.

Advertisements

For example,

print( is_number_or_float("56.453") )
print( is_number_or_float("-134.2454") )
print( is_number_or_float("454") )
print( is_number_or_float("-1454.7") )
print( is_number_or_float("0.1") )
print( is_number_or_float("abc134.2454edf") )
print( is_number_or_float("abc") )

Output:

Read More  Convert comma-separated string to List of Integers in Python
True
True
True
True
True
False
False

Analysis of the returned values,

  • It returned True for “56.453” because it contains only digits and a dot.
  • It returned True for “-134.2454” because it contains a minus symbol and digits and a dot.
  • It returned True for “454” because it contains only digits.
  • It returned True for “-1454.7” because it contains a minus symbol, digits and a dot.
  • It returned True for “0.1” because it contains a dot and digits
  • It returned False for “abc134.2454edf” because it contains some alphabets too.
  • It returned False for “abc” because it contains some alphabets too.

This proves that our function can check if the given string contains a number or float only.

Use Exceptional handling to check if a string contains only a number/float

We can pass the given string to the float() function. If string contains the correct representation of a number or float then it returns the float value, otherwise it raises a ValueError. We can catch this error and validate if string is float. We have created a function that will use the exception handling and float() function to check if given string object contains a float only,

Read More  Pandas: Apply Function to Column
def is_number(sample_str):
    """ Returns True if string contains only a
        number or float """
    result = True
    try:
        float(sample_str)
    except:
        result = False
    return result

Now we will test this function with different types of strings to validate that it identifies the string representation of numbers and floats.

For example,

print( is_number("56.453") )
print( is_number("-134.2454") )
print( is_number("454") )
print( is_number("-1454.7") )
print( is_number("0.1") )
print( is_number("abc134.2454edf") )
print( is_number("abc") )

Output:

Read More  Pandas Tutorial #8 - DataFrame.iloc[]
True
True
True
True
True
False
False

Analysis of the returned values,

  • It returned True for “56.453” because it contains only digits and a dot.
  • It returned True for “-134.2454” because it contains a minus symbol and digits and a dot.
  • It returned True for “454” because it contains only digits.
  • It returned True for “-1454.7” because it contains a minus symbol, digits and a dot.
  • It returned True for “0.1” because it contains a dot and digits
  • It returned False for “abc134.2454edf” because it contains some alphabets too.
  • It returned False for “abc” because it contains some alphabets too.

This proves that our function can check if the given string contains a number or float only.

The complete example is as follows,

print("********** Using Regex **********")

import re    

def is_number_or_float(sample_str):
    """ Returns True if string contains only a
        number or float """
    result = True
    if re.search("[-+]?\d*\.?\d+(?:[eE][-+]?\d+)?$", sample_str) is None:
        result = False
    return result

print( is_number_or_float("56.453") )
print( is_number_or_float("-134.2454") )
print( is_number_or_float("454") )
print( is_number_or_float("-1454.7") )
print( is_number_or_float("0.1") )
print( is_number_or_float("abc134.2454edf") )
print( is_number_or_float("abc") )

print("********** Using Exception Handling **********")

def is_number(sample_str):
    """ Returns True if string contains only a
        number or float """
    result = True
    try:
        float(sample_str)
    except:
        result = False
    return result


print( is_number("56.453") )
print( is_number("-134.2454") )
print( is_number("454") )
print( is_number("-1454.7") )
print( is_number("0.1") )
print( is_number("abc134.2454edf") )
print( is_number("abc") )

Output:

********** Using Regex **********
True
True
True
True
True
False
False
********** Using Exception Handling **********
True
True
True
True
True
False
False

Summary:

We learned how to check if a string contains a number or a float only.

Leave a Comment

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Scroll to Top