字符串-2-表示数值的字符串

题目描述

  • 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。
  • 考点:字符串

解题思路

  • 老老实实判断每个字符是否合法
  1. + - 只能出现在首或者eE的后一位,且+-号后比为数字
  2. Ee不能放在首尾,且后面必为数字或者+-号
  3. 小数点只能出现1次,且后面比为数字或为最后位;等
# -*- coding:utf-8 -*-
class Solution:
    # s字符串
    def isNumeric(self, s):
        # write code here
        hasE = False # 只能由一个Ee
        hasPoint = False # 只能有一个小数点
        sign = False # 最多有2个,且第二个只能在eE后
        for i in range(len(s)):
            if(s[i]=='e' or s[i]=='E'):
                if (i == (len(s)-1) or i == 0): # e不能在首尾
                    return False
                if hasE == True: # 如果有两个e,返回fasle
                    return False
                if '.' in s[i+1:]:
                    return False
                hasE = True
            elif(s[i] == '+' or s[i] == '-'):
                if i == (len(s)-1) :    # +-不能在末尾
                    return False
                # 第一次出现,但是不在首,那么比在eE后
                if (sign == False) and i>0 and (s[i-1] != 'E' and s[i-1] != 'e'):
                    return False
                # 第二次出现
                if (sign == True and (s[i-1] != 'E' and s[i-1] != 'e')): 
                    return False
                sign = True
            elif s[i] == '.':
                if hasPoint == True or i == 0:
                    return False
                hasPoint = True
            elif (s[i] < '0' or s[i] > '9'):
                return False
        return True
  • 正则表达式
# -*- coding:utf-8 -*-
class Solution:
    # s字符串
    def isNumeric(self, s):
        # write code here
        import re
        pattern = re.compile('^[-+]?\\d*(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?$')
        return re.match(pattern, s)

转义字符匹配
\d 匹配一个数字,即0-9
\D 匹配一个非数字,即除了0-9
\w 匹配一个单词字符(字母、数字、下划线)
\W 匹配任何非单词字符。等价于[^A-Za-z0-9_]
\s 匹配一个空白符
\S 匹配一个非空白符
\b 匹配单词边界
\B 匹配非单词边界
. 匹配一个任意字符,除了换行符‘\n’和回车符‘\r’
\1 重复子项

量词:对左边的匹配字符定义个数
? 出现零次或一次(最多出现一次)
+ 出现一次或多次(至少出现一次)
* 出现零次或多次(任意次)
{n} 出现n次
{n,m} 出现n到m次
{n,} 至少出现n次

任意一个或者范围
[abc123] : 匹配‘abc123’中的任意一个字符
[a-z0-9] : 匹配a到z或者0到9中的任意一个字符

限制开头结尾
^ 以紧挨的元素开头
$ 以紧挨的元素结尾

 

  • emmmmm...看看字符串能不能转换成float。。【捂脸
# -*- coding:utf-8 -*-
class Solution:
    # s字符串
    def isNumeric(self, s):
        # write code here
        try:
            float(s)
            return True
        except:
            return False

 

 

 

 

展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读