前言
在python中处理字符串的函数比较丰富,有时需要把字符串转化为整形、浮点型等;转换过程中,发现有时会报错,比如字符串“12*76”,转换为整形,直接转换int(“12*76”),会报无法转换的错误的,因为*无法转换为整形;所以在转换前,需要先进行判断该字符串的类型。
判断字符串是否为数字(整形)
这个直接调用python的库就可以了哈,假设str为字符串
str.isdigit() :判断所有字符都是数字(整形)
返回值 true:该字符串都为数字;false:该字符串不都是数字。
str.isalnum() 判断所有字符都是数字或者字母
返回值 true:该字符串都为数字或者字母;false:该字符串不都是数字或者字母。
判断字符串是否为浮点数
这个就不能直接使用python的库,毕竟浮点数有小数点的,小数点也算是一种符号,单纯使用str.isdigit() 所有字符都是数字 来判断是不行的;
不妨使用字符串分割(切片)函数,把浮点数分为小数点左边部分、小数点右边部分,再分别检测各部分是否为全数字
代码实现:
# 输入参数 str 需要判断的字符串
# 返回值 true:该字符串为浮点数;false:该字符串不是浮点数。
def isfloatnum(str):
s=str.split('.')
if len(s)>2:
return false
else:
for si in s:
if not si.isdigit():
return false
return true判断字符串是否为字母
这个直接调用python的库就可以了哈,假设str为字符串
str.isalpha() 判断所有字符都是字母
返回值 true:所有字符都是字母;false:所有字符不都是字母。
str.islower() 判断所有字符都是小写
str.isupper() 判断所有字符都是大写
str.istitle() 判断所有单词都是首字母大写
判断字符串是否为空
str.isspace() 判断所有字符都是空白字符、\t、\n、\r
小结
str.isdigit() 判断所有字符都是数字(整形)
str.isalnum() 判断所有字符都是数字或者字母
str.isalpha() 判断所有字符都是字母
str.islower() 判断所有字符都是小写
str.isupper() 判断所有字符都是大写
str.istitle() 判断所有单词都是首字母大写
方法补充
在python中,判断字符串的具体类型(数字、浮点数、字母等)有多种方法,适用场景不同。下面系统介绍几种常见需求及其最佳实现。
判断字符串是否为纯数字(非负整数)
方法:使用字符串的 isdigit() 方法。
s = "12345" print(s.isdigit()) # true s = "12.3" print(s.isdigit()) # false (包含小数点) s = "-123" print(s.isdigit()) # false (负号不是数字) s = "0" print(s.isdigit()) # true
- 只匹配
0-9字符,不匹配负数、小数或其它数字形式(如中文数字)。 - 空字符串返回
false。
判断字符串是否为整数(可带正负号)
使用 int() 转换并捕获异常,可处理正负整数和零。
def is_integer(s):
try:
int(s)
return true
except valueerror:
return false
print(is_integer("123")) # true
print(is_integer("-456")) # true
print(is_integer("+7")) # true
print(is_integer("12.3")) # false
print(is_integer("12a")) # false
print(is_integer("")) # false- 适用于任何有效的整数表示,包括前导正负号。
- 不支持科学计数法(如
1e3会被视为浮点数,但int("1e3")会报错)。
判断字符串是否为浮点数(可带正负号、小数点、科学计数法)
使用 float() 转换并捕获异常。
def is_float(s):
try:
float(s)
return true
except valueerror:
return false
print(is_float("3.14")) # true
print(is_float("-0.001")) # true
print(is_float("2e-5")) # true
print(is_float("inf")) # true (无穷大)
print(is_float("nan")) # true (非数字)
print(is_float("123")) # true (整数也是有效的浮点数)
print(is_float("12a")) # false- 会识别
inf、-inf、nan等特殊浮点值(根据需求可额外过滤)。 - 整数也会被判定为
true,若需严格区分小数,可额外检查是否包含小数点或科学计数法。
判断字符串是否为纯字母(只含字母,无空格或数字)
使用字符串的 isalpha() 方法。
s = "hello" print(s.isalpha()) # true s = "hello123" print(s.isalpha()) # false (包含数字) s = "你好" print(s.isalpha()) # true (中文字符也被视为字母) s = " " print(s.isalpha()) # false
- 对于非ascii字母(如中文、希腊字母)也返回
true。 - 如需仅限英文字母,可使用正则
[a-za-z]。
判断字符串是否为字母或数字组合(无其他字符)
使用字符串的 isalnum() 方法。
print("abc123".isalnum()) # true
print("123".isalnum()) # true
print("abc".isalnum()) # true
print("abc 123".isalnum()) # false (含空格)
print("abc_123".isalnum()) # false (含下划线)- 等价于
isalpha() or isdigit(),但一次调用更高效。 - 同样支持中文等非ascii字符。
使用正则表达式精确控制
当需要更复杂的规则(例如:允许前导负号、小数点后必须有数字、不能是科学计数法等)时,可以使用正则。
import re
def is_positive_integer(s):
"""只允许纯数字字符串,无前导零(可选)"""
return bool(re.fullmatch(r'[1-9][0-9]*|0', s))
def is_decimal_float(s):
"""严格判断浮点数:必须有小数点,且小数点前后至少有一位数字"""
return bool(re.fullmatch(r'-?\d+\.\d+', s))
def is_english_letters(s):
"""仅限英文字母(大小写)"""
return bool(re.fullmatch(r'[a-za-z]+', s))使用 re.fullmatch 确保整个字符串完全匹配,避免部分匹配。
综合判断示例:识别数字、浮点数、字母
def classify_string(s):
if not s:
return "空字符串"
if s.isdigit():
return "非负整数"
if s.isalpha():
return "字母字符串(含多语言)"
try:
int(s)
return "整数(可带符号)"
except valueerror:
pass
try:
float(s)
return "浮点数(含科学计数法)"
except valueerror:
pass
if s.isalnum():
return "字母数字混合"
return "其他类型"
# 测试
print(classify_string("123")) # 非负整数
print(classify_string("-456")) # 整数(可带符号)
print(classify_string("3.14")) # 浮点数(含科学计数法)
print(classify_string("abc")) # 字母字符串(含多语言)
print(classify_string("abc123")) # 字母数字混合
print(classify_string(" ")) # 其他类型注意事项
- 空字符串:上述
isdigit()、isalpha()、isalnum()对空字符串均返回false;int()/float()转换会抛出异常,需额外处理。 - 正负号与空格:
isdigit()不识别符号;int()和float()可以识别前导正负号,但会忽略前后空格。 - 科学计数法:
float()可识别,但isdigit()不能,可根据业务决定是否接受。 - unicode数字:
isdigit()可以识别其他语言的数字(如 "一二三"),如需仅限ascii数字,可用s.isdigit() and s.isascii()(python 3.7+)。
到此这篇关于python判断字符串是否为数字,浮点数或者字母的文章就介绍到这了,更多相关python判断字符串类型内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论