如何在 Python 中检查字符串是否包含数字
本文介绍如何检查 Python 字符串是否包含数字。
如果给定的字符串包含数字,则 Python 内置的 any
函数与 str.isdigit
一起将返回 True
。否则返回 False
。
如果给定的字符串包含数字,则模式为 r'\d'
的 Python 正则表达式搜索方法也可以返回 True
。
带有 str.isdigit
的 Python any
函数来检查字符串是否包含数字
如果给定的 Python 迭代对象的任何元素为 True
,则 any
函数返回 True
,否则,返回 False
。
如果给定字符串中的所有字符均为数字,则 str.isdigit()
返回 True
,否则返回 False
。
any(chr.isdigit() for chr in stringExample)
如果 stringExample
至少包含一个数字,那么上面的代码将返回 True
,因为 chr.isdigit() for chr in stringExample
在可迭代对象中至少有一个 True
。
工作示例
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))
输出:
True
False
True
map()
函数
Python map(function, iterable)
函数将函数 function
应用于给定可迭代对象的每个元素,并返回一个迭代器产生以上结果。
因此,我们可以将上述解决方案重写为
any(map(str.isdigit, stringExample))
工作示例
str1 = "python1"
str2 = "nonumber"
str3 = "12345"
print(any(map(str.isdigit, str1)))
print(any(map(str.isdigit, str2)))
print(any(map(str.isdigit, str3)))
输出:
True
False
True
re.search(r'\d')
检查字符串是否包含数字
re.search(r'\d', string)
函数扫描 string
并返回匹配对象对于与给定模式匹配的第一个位置- \d
,表示在 0 到 9 之间的任何数字,如果找不到匹配项,则返回 None
。
import re
print(re.search(r'\d', "python3.8"))
#output: <re.Match object; span=(6, 7), match='3'>
match
对象包含 2 个元组的 span
,它们是 match
的开始和结束位置,以及匹配的内容,例如 match = '3'
。
bool()
函数可以将 match
对象或 None
的 re.search
结果转换为 True
或 False
。
工作示例
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)))
输出:
True
False
True
就运行时间而言,正则表达式评估比使用内置的字符串函数要快得多。如果字符串的值相当大,那么 re.search()
比使用字符串函数更理想。
在给定字符串上运行 search()
函数之前,使用 re.compile()
编译表达式,也会使执行时间更快。
将 compile()
的返回值捕获到一个变量中,然后在这个变量中调用 search()
函数。在这种情况下,search()
只需要一个参数,即对照编译后的表达式搜索的字符串。
def hasNumber(stringVal):
re_numbers = re.compile('\d')
return False if (re_numbers.search(stringVal) == None) else True
综上所述,内置函数 any()
和 isdigit()
可以很容易地串联使用,检查一个字符串是否包含一个数字。
然而,在正则表达式模块 re
中使用实用函数 search()
和 compile()
会比内置的字符串函数更快地生成结果。所以,如果你要处理大的数值或字符串,那么正则表达式的解决方案要比字符串函数更理想。
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.
LinkedIn