# How to Check a String Contains a Number in Python

Jinku Hu Feb 02, 2024

This article introduces how to check whether a Python string contains a number or not.

Python built-in `any` function together with `str.isdigit` will return `True` if the given string contains a number in it; otherwise, it returns `False`.

Python regular expression search method with pattern `r'\d'` could also return `True` if the given string contains a number.

## Python `any` Function With `str.isdigit` to Check Whether a String Contains a Number

`any` function returns `True` if any element of the given iterable is `True`; otherwise, it returns `False`.

`str.isdigit()` returns `True` if all the characters in the given string are digits, `False` otherwise.

``````any(chr.isdigit() for chr in stringExample)
``````

If `stringExample` contains at least a number, then the above code returns `True` because `chr.isdigit() for chr in stringExample` has at least one `True` in the iterable.

• Working Example
``````str1 = "python1"
str2 = "nonumber"
str3 = "12345"

print(any(chr.isdigit() for chr in str1))
print(any(chr.isdigit() for chr in str2))
print(any(chr.isdigit() for chr in str3))
``````

Output:

``````True
False
True
``````

## Use the `map()` Function to Check Whether a String Contains a Number

Python `map(function, iterable)` fuction applies `function` to every element of the given `iterable` and returns an iterator that yields the above result.

Therefore, we could rewrite the above solution to,

``````any(map(str.isdigit, stringExample))
``````
• Working Example
``````str1 = "python1"
str2 = "nonumber"
str3 = "12345"

print(any(map(str.isdigit, str1)))
print(any(map(str.isdigit, str2)))
print(any(map(str.isdigit, str3)))
``````

Output:

``````True
False
True
``````

## Use `re.search(r'\d')` to Check Whether a String Contains a Number

`re.search(r'\d', string)` pattern scans the `string` and returns the match object for the first location that matches the given pattern - `\d` that means any number between 0 and 9 and returns `None` if no match is found.

``````import re

print(re.search(r"\d", "python3.8"))
# output: <re.Match object; span=(6, 7), match='3'>
``````

The `match` object contains the 2-tuple `span` that indicates the start and end position of the `match` and the matched content like `match = '3'`.

`bool()` function could cast the `re.search` result from the `match` object or `None` to `True` or `False`.

• Working Example
``````import re

str1 = "python12"
str2 = "nonumber"
str3 = "12345"

print(bool(re.search(r"\d", str1)))
print(bool(re.search(r"\d", str2)))
print(bool(re.search(r"\d", str3)))
``````

Output:

``````True
False
True
``````

In terms of runtime, regular expression evaluation is much faster than using built-in string functions. If the string’s value is considerably large, then `re.search()` is more optimal than using the string functions.

Compiling the expression using `re.compile()` before running the `search()` function on the given strings will also make the execution time even faster.

Catch the return value of `compile()` into a variable and call the `search()` function within that variable. In this case, `search()` will only need a single parameter, that is, the string to search against the compiled expression.

``````def hasNumber(stringVal):
re_numbers = re.compile("\d")
return False if (re_numbers.search(stringVal) == None) else True
``````

In summary, the built-in functions `any()` and the `isdigit()` can easily be used in tandem to check if a string contains a number.

However, using the utility functions `search()` and `compile()` within the regular expression module `re` will generate results faster than the built-in string functions. So if you’re dealing with large values or strings, then the regular expression solution is much more optimal than the string functions.

Author: Jinku Hu

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.