剑指 Offer 20. 表示数值的字符串

举报
悲恋花丶无心之人 发表于 2021/02/03 00:01:53 2021/02/03
2.1k+ 0 0
【摘要】 目录 一、题目内容 二、解题思路 三、代码 一、题目内容 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100"、"5e2"、"-123"、"3.1416"、"-1E-16"、"0123"都表示数值,但"12e"、"1a3.14"、"1.2.3"、"+-5"及"12e+5.4"都不是。 二、解题思路 *代表匹配零次或多次 +代...

目录

一、题目内容

二、解题思路

三、代码


一、题目内容

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

二、解题思路

  1. *代表匹配零次或多次

  2. +代表匹配一次或多次

  3. ?代表匹配零次或一次

  4. $匹配输入字符串的结束位置

  5. \\.代表小数点

  6. \\s代表空格,则\\s*代表匹配多个空格

  7. \\d代表匹配一个数字字符,等价于[0-9],则\\d+\\.\\d*可匹配1.1.0\\d*\\.\\d+可匹配.01.0

  8. [+-]代表匹配包含的任一字符+-[+-]?则说明+或-可有可无,例如0e+40e4是一样的,都是0.0

  9. 注意若最后不加上$,则测试样例0e不通过,匹配结果是0,加上$则匹配最后的子表达式([eE][+-]?\d+)?\s*

  • 例如:'(\d+[eE]\d+)?'和'(\d+[eE]\d+)?$',匹配0e,前者为'0',后者为None

三、代码


       import re
       class Solution:
       def isNumber(self, s: str) -> bool:
        fmt = '\\s*[+-]?((\\d+\\.\\d*)|(\\d*\\.\\d+)|\\d+)([eE][+-]?\\d+)?\\s*$'
        is_match = re.match(fmt, s)
       if is_match:
        print(is_match)
       return True
       else:
       return False
       if __name__ == '__main__':
        test = ' -.0e+4 '
        s = Solution()
        ans = s.isNumber(test)
        print(ans)
   
  

文章来源: nickhuang1996.blog.csdn.net,作者:悲恋花丶无心之人,版权归原作者所有,如需转载,请联系作者。

原文链接:nickhuang1996.blog.csdn.net/article/details/108360419

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。