65.有效数字
string, https://leetcode.cn/problems/valid-number/
给定一个字符串 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 <= 20s仅含英文字母(大写和小写),数字(0-9),加号'+',减号'-',或者点'.'。
python
class Solution:
def isNumber(self, s: str) -> bool:
import re
pattern = r'^[-+]?(\d+(\.\d*)?|\.\d+)([eE][-+]?\d+)?$'
ans = re.match(pattern, s)
if ans is not None:
return True
else:
return False正则表达式模式解析
^:表示字符串的开始。[-+]?:表示可选的正负号,?表示前面的字符可以出现 0 次或 1 次。(\d+(\.\d*)?|\.\d+):表示数字部分,可以是以下两种形式之一:\d+(\.\d*)?:整数部分后面可以跟一个小数部分,小数部分可以为空。\.\d+:纯小数部分,必须以小数点开头,后面跟着至少一个数字。
([eE][-+]?\d+)?:表示可选的指数部分,?表示前面的整个部分可以出现 0 次或 1 次。[eE]:表示指数符号,可以是小写e或大写E。[-+]?\d+:表示指数部分的数字,可以带正负号,后面必须跟着至少一个数字。
$:表示字符串的结束。