65.有效数字 python

题目

题目描述

给定一个字符串 s ,返回 s 是否是一个 有效数字。

例如,下面的都是有效数字:“2”, “0089”, “-0.1”, “+3.14”, “4.”, “-.9”, “2e10”, “-90E3”, “3e+7”, “+6e-1”, “53.5e93”, “-123.456e789”,而接下来的不是:“abc”, “1a”, “1e”, “e3”, “99e2.5”, “–6”, “-+3”, “95a54e53”。

一般的,一个 有效数字 可以用以下的规则之一定义:

一个 整数 后面跟着一个 可选指数。
一个 十进制数 后面跟着一个 可选指数。
一个 整数 定义为一个 可选符号 ‘-’ 或 ‘+’ 后面跟着 数字。

一个 十进制数 定义为一个 可选符号 ‘-’ 或 ‘+’ 后面跟着下述规则:

数字 后跟着一个 小数点 .。
数字 后跟着一个 小数点 . 再跟着 数位。
一个 小数点 . 后跟着 数位。
指数 定义为指数符号 ‘e’ 或 ‘E’,后面跟着一个 整数。

数字 定义为一个或多个数位。

示例 1:

输入:s = “0”

输出:true

示例 2:

输入:s = “e”

输出:false

示例 3:

输入:s = “.”

输出:false

提示:

1 <= s.length <= 20
s 仅含英文字母(大写和小写),数字(0-9),加号 ‘+’ ,减号 ‘-’ ,或者点 ‘.’ 。

题解

思路分析

为了判断一个字符串是否为有效数字,我们可以使用正则表达式(regex)来匹配上述规则。通过构造一个合适的正则表达式,可以有效地验证字符串是否符合有效数字的定义。

正则表达式的构建

根据题目描述的有效数字规则,我们可以逐步构建正则表达式:

  1. 整数部分[+-]?(\d+)

    • 可选符号 [+-]?
    • 一个或多个数字 (\d+)
  2. 十进制数部分

    • 形式1:[+-]?(\d+\.)
    • 形式2:[+-]?(\d+\.\d*)
    • 形式3:[+-]?(\.\d+)
  3. 指数部分(e|E)[+-]?(\d+)

    • 指数符号 (e|E)
    • 可选符号 [+-]?
    • 一个或多个数字 (\d+)
  4. 组合:将整数和十进制数部分与指数部分组合起来。

最终的正则表达式可以写成:

^[+-]?(\d+(\.\d*)?|\.\d+)([eE][+-]?\d+)?$

Python 实现代码

import re

def isNumber(s: str) -> bool:
    # 定义正则表达式
    pattern = r"^[+-]?(\d+(\.\d*)?|\.\d+)([eE][+-]?\d+)?$"
    
    # 使用正则表达式匹配字符串
    return bool(re.match(pattern, s.strip()))

代码解释

  1. 正则表达式解释

    • ^[+-]?:匹配字符串开头的可选符号 '+''-'
    • (\d+(\.\d*)?|\.\d+):匹配整数或十进制数部分。
      • \d+(\.\d*)?:匹配整数后跟可选的小数部分。
      • \.\d+:匹配小数点后跟一个或多个数字。
    • ([eE][+-]?\d+)?$:匹配可选的指数部分,包括指数符号 'e''E',可选符号 '+''-',以及一个或多个数字。
  2. 函数实现

    • isNumber 函数首先定义了一个正则表达式模式 pattern
    • 然后使用 re.match 函数检查字符串 s 是否完全匹配这个模式。注意这里使用了 strip() 方法去除字符串两端的空白字符,以确保不会因为多余的空格影响匹配结果。
    • 最终返回匹配结果的布尔值。

这种方法利用了正则表达式的强大功能,简洁且高效地实现了对字符串是否为有效数字的判断。

提交结果

在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gxls2024

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值