Hey! If you love Python and building Python apps as much as I do, let's connect on Twitter or LinkedIn. I talk about this stuff all the time!

Checking if a String is a Number in Python

Learn how to check if a string contains a numeric value in Python. This article will walk you through the process, provide code examples, and explain the concepts behind this task. …


Updated June 9, 2023

Learn how to check if a string contains a numeric value in Python. This article will walk you through the process, provide code examples, and explain the concepts behind this task.

Definition of the Concept

Checking if a string is a number in Python is essentially determining whether a given string represents an integer or floating-point number. This can be useful when dealing with user input, parsing data from external sources, or validating form submissions.

Step-by-Step Explanation

To check if a string is a number in Python, you’ll need to use the isinstance() function along with type checking for integers and floats. Here’s a step-by-step breakdown:

1. Importing the Necessary Module (Not Required but Helpful)

While not necessary, importing the re module can help simplify the process by using regular expressions. However, we’ll cover both approaches: using isinstance() and using the re module.

import re

2. Using isinstance() with Type Checking

You can use the isinstance() function along with type checking to verify if a string is an integer or float. Here’s how you do it:

def is_number(s):
    try:
        int(s)  # Try converting the string to an integer
        return True
    except ValueError:
        try:
            float(s)  # If not an integer, try converting it to a float
            return True
        except ValueError:
            return False

# Test cases
print(is_number("123"))  # Expected output: True
print(is_number("123.45"))  # Expected output: True
print(is_number("abc"))  # Expected output: False

3. Using Regular Expressions with the re Module

If you prefer using regular expressions, you can use a pattern to match both integers and floats:

import re

def is_number(s):
    return bool(re.match(r'^[-+]?\d*\.?\d+$', s))

# Test cases
print(is_number("123"))  # Expected output: True
print(is_number("123.45"))  # Expected output: True
print(is_number("abc"))  # Expected output: False

Code Explanation

The isinstance() approach works by attempting to convert the string into an integer or float using the built-in types in Python (int() and float(), respectively). If these conversions are successful, it returns True; otherwise, it returns False.

For the regular expression method, we’re using a pattern that matches both integers and floats. Here’s how it breaks down:

  • ^: The start of the string.
  • [-+]?: An optional sign (+ or -).
  • \d*\.?\d+: Zero or more digits (\d*), followed by an optional decimal point (\.?), and finally one or more digits (\d+). This pattern matches integers (optional sign, then zero or more digits) and floats (optional sign, zero or more digits, a decimal point, and one or more digits).
  • $: The end of the string.

Conclusion

In conclusion, checking if a string is a number in Python can be achieved using both isinstance() with type checking for integers and floats, as well as regular expressions. Understanding these concepts will help you navigate a wide range of scenarios involving user input, data validation, and parsing external data.

Stay up to date on the latest in Python, AI, and Data Science

Intuit Mailchimp