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

举报
悲恋花丶无心之人 发表于 2021/02/03 00:01:53 2021/02/03
【摘要】 目录 一、题目内容 二、解题思路 三、代码 一、题目内容 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+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

三、代码


   
  1. import re
  2. class Solution:
  3. def isNumber(self, s: str) -> bool:
  4. fmt = '\\s*[+-]?((\\d+\\.\\d*)|(\\d*\\.\\d+)|\\d+)([eE][+-]?\\d+)?\\s*$'
  5. is_match = re.match(fmt, s)
  6. if is_match:
  7. print(is_match)
  8. return True
  9. else:
  10. return False
  11. if __name__ == '__main__':
  12. test = ' -.0e+4 '
  13. s = Solution()
  14. ans = s.isNumber(test)
  15. print(ans)

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

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

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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