进一步扩展到全角数字:
# 进一步扩展到全角数字
def is_number(s):
try:
float(s)
return True
except ValueError:
pass
import unicodedata
try:
unicodedata.numeric(s)
return True
except (TypeError, ValueError):
pass
if len(s) < 2:
return False
try:
d = 0
if s.startswith('-'):
s = s[1:]
for c in s:
if c == '-': # 全角减号
return False
if c == '.': # 全角点号
if d > 0:
return False
else:
d = 1
continue
unicodedata.numeric(c)
return True
except (TypeError, ValueError):
pass
return False
# 测试字符串和数字
print(f'{is_number("foo")}')
print(f'{is_number("1") }')
print(f'{is_number("1.3") }')
print(f'{is_number("-1.37") }')
print(f'{is_number("1e3") }')
print(f'{is_number("2.345.6") }')
print(f'{is_number("-5.2-8") }')
print(f'{is_number("52-8") }')
print(f'{is_number("-.5") }')
print(f'{is_number("-5.") }')
print(f'{is_number(".5") }')
# 测试Unicode
# 阿拉伯语 5
print(f'{is_number("٥") }')
# 泰语 2
print(f'{is_number("๒") }')
# 中文数字
print(f'{is_number("四") }')
print(f'{is_number("四卅") }')
# 全角数字
print(f'{is_number("123") }')
print(f'{is_number("-123") }')
print(f'{is_number("-123") }')
print(f'{is_number("12-3") }')
print(f'{is_number("123-") }')
print(f'{is_number("1.23") }')
print(f'{is_number("1.23") }')
print(f'{is_number(".23") }')
print(f'{is_number("-.23") }')
print(f'{is_number("1.23") }')
print(f'{is_number("1.2.3") }')
# 版权号
print(f'{is_number("©") }')
leaf_cq
leaf_cq
all***p@163.com4个月前 (08-05)