Skip to content

How to Check if there are Numbers in Strings in Python

Learn efficient methods to detect numeric characters in Python strings, including checking for any digits, only numbers, and handling integers/floats with code examples.

Determining if a string contains numeric characters is a common task in Python.

This guide demonstrates various methods for checking if a string contains numbers, whether it contains only numbers, including techniques using generator expressions, regular expressions, string methods and built-in functions.

Checking if a String Contains a Number

Several approaches can be used to determine if a string contains any digits.

Using a Generator Expression and any()

This method combines a generator expression with the any() function for a concise solution:

def contains_number(string):
    return any(char.isdigit() for char in string)

print(contains_number('abc123')) # Output: True
print(contains_number('abc'))    # Output: False
print(contains_number('-1abc'))  # Output: True
  • The isdigit() method checks if all characters in a string are digits. Returns True if the string contains only digits and is not empty, otherwise returns False.

Using a for Loop

A for loop provides a more explicit approach:

def contains_number_loop(string):
    for char in string:
        if char.isdigit():
            return True  # Return True immediately if digit found
    return False  # Return False if no digits found after loop

print(contains_number_loop('abc123'))  # Output: True
print(contains_number_loop('abc'))     # Output: False
print(contains_number_loop('-1abc'))   # Output: True
  • The function iterates over the characters and immediately returns True if a digit is encountered.
  • If no digits are present it returns False.

Using re.search()

The re.search() method, which uses regular expressions, provides a more flexible approach that allows for looking for more complex patterns, and can also match multiple different digits at once:

import re

def contains_number_regex(string):
    return bool(re.search(r'\d', string))

print(contains_number_regex('abc123')) # Output: True
print(contains_number_regex('abc'))    # Output: False
print(contains_number_regex('-1abc'))  # Output: True
  • re.search(r'\d', string) returns a match object if a digit is found, and None if not found, which then bool() casts to True or False respectively.

Using re.findall()

The re.findall() method finds all occurrences of the pattern and returns a list of matches. This method is especially useful when there are multiple matches:

import re
my_str = 'a12b34c56'
matches = re.findall(r'\d+', my_str)      # r'\d+' matches one or more consecutive digits.
print(matches)                            # Output: ['12', '34', '56']
if len(matches) > 0:
    print('The string contains a number') # Output: The string contains a number
else:
    print('The string does NOT contain a number')

Checking if a String Contains Only Numbers

To ensure a string only contains numbers, use the isnumeric() method, try/except or a regular expression.

Using isnumeric()

The isnumeric() method is a direct way to check for numeric characters, including digits and other Unicode numeric characters. It does not, however, include characters like - or ..

my_str = '3468910'
print(my_str.isnumeric()) # Output: True

if my_str.isnumeric():
    print('The string contains only numbers') # Output: The string contains only numbers
else:
    print('The string does NOT contain only numbers')


print('5'.isnumeric())      # Output: True
print('-50'.isnumeric())    # Output: False
print('3.14'.isnumeric())   # Output: False

Validating Integers and Floats with try/except

If you need to determine that the string is a valid number use a try/except block to handle potential ValueError during casting.

def is_integer(string):
    try:
        int(string)
    except ValueError:
        return False
    return True

print(is_integer('359'))   # Output: True
print(is_integer('-359'))  # Output: True
print(is_integer('3.59'))  # Output: False


def is_float(string):
    try:
        float(string)
    except ValueError:
        return False
    return True


print(is_float('359'))  # Output: True
print(is_float('-359')) # Output: True
print(is_float('3.59')) # Output: True
  • The functions attempt to cast the string using either int() or float().
  • The try/except block gracefully handles invalid strings, preventing errors and returning False in such cases.

Using re.match()

A more direct way to validate that a string consists only of digits is using regular expressions:

import re

def contains_only_numbers(string):
    return bool(re.match(r'^[0-9]+$', string))

print(contains_only_numbers('3590'))  # Output: True
print(contains_only_numbers('3x59'))  # Output: False
  • The regex pattern ^[0-9]+$ matches a string containing one or more digits from start (^) to end ($) of the string, effectively checking that it contains only numbers.
Navigation