# Check a String Contains a Number in Python

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.

Contribute
DelftStack is a collective effort contributed by software geeks like you. If you like the article and would like to contribute to DelftStack by writing paid articles, you can check the write for us page.

## Related Article - Python String

• Convert String to Bytes in Python
• Remove Certain Characters From String in Python