检测Python字符串是数字还是字母[重复]

2024-04-12

如何检测字符串中的数字或字母?我知道您使用 ASCII 代码,但是哪些函数利用了它们呢?


检查字符串是否为非负的数字(整数)和字母

您可以使用str.isdigit() https://docs.python.org/2/library/stdtypes.html#str.isdigit and str.isalpha() https://docs.python.org/2/library/stdtypes.html#str.isalpha检查给定的字符串是否是非负的分别为整数(0 或更大)和字母字符。

结果示例:

# For alphabet
>>> 'A'.isdigit()
False
>>> 'A'.isalpha()
True

# For digit
>>> '1'.isdigit()
True
>>> '1'.isalpha()
False

检查字符串是否为正/负 - 整数/浮点数

str.isdigit()回报False如果字符串是negative数字或浮点数。例如:

# returns `False` for float
>>> '123.3'.isdigit()
False
# returns `False` for negative number
>>> '-123'.isdigit()
False

如果你想还要检查negative整数和float https://docs.python.org/3/library/functions.html#float,那么您可以编写一个自定义函数来检查它:

def is_number(n):
    try:
        float(n)   # Type-casting the string to `float`.
                   # If string is not a valid `float`, 
                   # it'll raise `ValueError` exception
    except ValueError:
        return False
    return True

示例运行:

>>> is_number('123')    # positive integer number
True

>>> is_number('123.4')  # positive float number
True
 
>>> is_number('-123')   # negative integer number
True

>>> is_number('-123.4') # negative `float` number
True

>>> is_number('abc')    # `False` for "some random" string
False

检查数字时丢弃“NaN”(不是数字)字符串

上述函数将返回True对于“NAN”(不是数字)字符串,因为对于 Python 来说,它是表示它不是数字的有效浮点数。例如:

>>> is_number('NaN')
True

为了检查数字是否为“NaN”,您可以使用math.isnan() https://docs.python.org/2/library/math.html#math.isnan as:

>>> import math
>>> nan_num = float('nan')

>>> math.isnan(nan_num)
True

或者,如果您不想导入额外的库来检查这一点,那么您可以简单地通过使用它与自身进行比较来检查它==。 Python 返回False when nanfloat 与自身进行比较。例如:

# `nan_num` variable is taken from above example
>>> nan_num == nan_num
False

因此,上面功能is_number可以更新返回False for "NaN" as:

def is_number(n):
    is_number = True
    try:
        num = float(n)
        # check for "nan" floats
        is_number = num == num   # or use `math.isnan(num)`
    except ValueError:
        is_number = False
    return is_number

示例运行:

>>> is_number('Nan')   # not a number "Nan" string
False

>>> is_number('nan')   # not a number string "nan" with all lower cased
False

>>> is_number('123')   # positive integer
True

>>> is_number('-123')  # negative integer
True

>>> is_number('-1.12') # negative `float`
True

>>> is_number('abc')   # "some random" string
False

允许像“1+2j”这样的复数被视为有效数字

上面的函数仍然会返回你False为了复数 https://docs.python.org/3/library/stdtypes.html#typesnumeric。如果你想要你的is_number功能治疗复数作为有效号码,那么您需要将传递的字符串类型转换为complex() https://docs.python.org/3/library/functions.html#complex代替float() https://docs.python.org/3/library/functions.html#float。那么你的is_number函数将如下所示:

def is_number(n):
    is_number = True
    try:
        #      v type-casting the number here as `complex`, instead of `float`
        num = complex(n)
        is_number = num == num
    except ValueError:
        is_number = False
    return is_number

示例运行:

>>> is_number('1+2j')    # Valid 
True                     #      : complex number 

>>> is_number('1+ 2j')   # Invalid 
False                    #      : string with space in complex number represetantion
                         #        is treated as invalid complex number

>>> is_number('123')     # Valid
True                     #      : positive integer

>>> is_number('-123')    # Valid 
True                     #      : negative integer

>>> is_number('abc')     # Invalid 
False                    #      : some random string, not a valid number

>>> is_number('nan')     # Invalid
False                    #      : not a number "nan" string

PS:根据号码的类型,每次检查的每次操作都会产生额外的开销。选择版本is_number满足您的要求的功能。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

检测Python字符串是数字还是字母[重复] 的相关文章

随机推荐

  • 自定义二进制数据的 cURL POST(不是表单内容)

    以下代码片段成功发送 POST 请求但未发送 sendStream 中的数据 该流有效且包含数据 这已被验证 的问题 curl setopt request CURLOPT HTTPHEADER array Content type app
  • 获取 JSON 中未知值后面的字符串

    我使用维基百科的 API 来获取有关页面的信息 API 给了我这样的 JSON query pages 188791 pageid 188791 ns 0 title Vanit u00e9 langlinks lang bg Vanita
  • React Native expo 图像选择器将图像上传到 firebase 存储(v9)崩溃

    我正在尝试将从 expo 图像选择器中选择的图像上传到 firebase 存储 因为我正在使用 expo 我检查了 expo 图像选择器 git 并找到了 firebase 的 uploadImageAsync 所以我复制了它并只做了一点更
  • Jquery 对话框仅打开一次

    全部 我知道有人问过这个问题 但以前的解决方案似乎不适用于我的情况 我有一个简单的表 每行都有许多记录 最后一列是删除超链接 我正在尝试使用对话框弹出并确认删除 如果我使用对话框所在的 div 的显式名称 我将其恰好放置在表格所在的 div
  • Google 通讯录广播/推送/通知/Hook API

    我正在寻找一种在编辑 删除或创建谷歌方面的联系人时接收来自谷歌的通知 广播的方法 我查看了 Google Contacts API 文档 但找不到任何内容 我认为一定有办法 例如Android 肯定不会轮询更改 Google Contact
  • 文本底部的几个像素被切断

    我实在搞不懂这个案子到底是怎么回事 在多行文本上 底部的几个像素被切除 Setting line height normal 为我工作
  • JavaScript - 如何等待/SetTimeOut/睡眠/延迟

    这又是我的剪刀石头布游戏 目前 用户无法看到发生了什么 因为在提示输入 石头 布或剪刀 后 他们会立即重新提示 问题是我怎样才能使程序延迟 以便他们至少可以读取正在发生的事情 我读到 JavaScript 中不存在 sleep 我正在尝试使
  • Laravel bigInteger 在关系中四舍五入为 int

    好吧 这是我的迁移 public function up Schema create instagrams function Blueprint table table gt bigInteger id gt unsigned gt pri
  • sql server 中 System.Version 的数据类型

    最好的储存方式是什么系统版本 http msdn microsoft com en us library system version aspx在 SQL Server 中 当我使用varchar类型时 按asc排序的结果是 1 0 0 0
  • 找不到方法 getAndroidDeviceInfo 的实现

    我正在尝试运行这个example https github com flutter plugins tree master packages device info example在插件页面中 我收到这个错误 I flutter 3273
  • 如何在重定向到我的应用程序后关闭 Android 浏览器?

    重定向到我的应用程序后如何关闭浏览器 有什么办法可以做到这一点吗 据我所知 不可能影响其他活动 例如关闭等
  • 删除列表中复杂度优于 O(n^2) 的子字符串

    我有一个包含许多单词 100 000 的列表 我想做的是删除列表中每个单词的所有子字符串 因此 为了简单起见 我们假设我有以下列表 words Hello Hell Apple Banana Ban Peter P e 以下输出是所需的 H
  • 同时获取logcat和内核日志

    我正在尝试通过以下命令获取日志 logcat 和 kmsg logcat v 时间 f dev kmsg cat proc 但是我不确定日志文件存储在哪里以及它的名称是什么 我如何识别它 好的 这是谷歌快速搜索的结果 安卓日志系统 http
  • Haskell 中的 undefined 和 Java 中的 null 有什么区别?

    两者的类型都是所有类型的交集 无人居住 两者都可以在代码中传递而不会失败 直到尝试评估它们为止 我能看到的唯一区别是 在 Java 中 有一个漏洞允许null仅针对一个操作进行评估 即引用相等比较 而在 Haskell 中undefined
  • 设置特定文件的 AWS S3 过期时间

    我阅读了 PHP AWS SDK 文档 https docs aws amazon com aws sdk php v2 api class Aws S3 S3Client html https docs aws amazon com aw
  • 二分布局Gephi 0.9.1

    我的问题简单得令人尴尬 how do i plot a bipartite graph in Gephi with a layout like the one you see in the attached image 我真的无法在Geph
  • 是否可以通过显式类型转换将基类对象分配给派生类引用?

    是否可以在 C 中使用显式类型转换将基类对象分配给派生类引用 我已经尝试过了 它会产生运行时错误 不可以 对派生类的引用实际上必须引用派生类的实例 或 null 否则你会期望它如何表现 例如 object o new object stri
  • Jetty 返回 403 Forbidden

    您好 我正在将我的网络应用程序从 tomcat 移植到 Jetty 我正在使用 Jetty runner 来启动它 我使用以下命令来启动 Jetty java jar jetty runner jar port path url path
  • psql 显示 ansi 彩色文本

    My psqlrc有以下选项 setenv LESS iMSx4 FXR setenv PAGER less pset pager always 我想要着色的 psql 输出是 x1B 35m x1B 0m x1B 35mr x1B 0m
  • 检测Python字符串是数字还是字母[重复]

    这个问题在这里已经有答案了 如何检测字符串中的数字或字母 我知道您使用 ASCII 代码 但是哪些函数利用了它们呢 检查字符串是否为非负的数字 整数 和字母 您可以使用str isdigit https docs python org 2