题解 | #表示数值的字符串#

表示数值的字符串

http://www.nowcoder.com/practice/e69148f8528c4039ad89bb2546fd4ff8

求解步骤:

1.对单独的"."进行处理;

if str == ".":
    return False

2.去除字符串中的空格,组成新字符串(定义filter函数过滤);

def is_space(self, s):
    return s != ' '

str_rm_space = filter(self.is_space, str)
new_str = ""
for s in list(str_rm_space):
    new_str += s

3.字符串中出现两个及以上"."进行处理, 用str.split('.')划分即可判断包含几个".";

# 检查小数点个数
dot_check = new_str.split('.')
if len(dot_check) > 2:
    return False

4.利用正则表达式匹配数字和小数

# 匹配数字和小数,包括小数
if re.match('^(\+|\-|)(\d+)(\.(\d+|))?$', new_str):
    return True
if re.match('^(\+|\-|)(\.\d+)$', new_str):
    return True

5.利用正则表达式匹配科学计数法数字

if re.match('^(\+|\-|)(\d+)(\.\d+)(e|E)(\+|\-|)(\d+)(\.\d+)?$', new_str):
    return True
if re.match('^(\+|\-|)(\d+)(\.)?(e|E)(\-|)(\d+)(\.\d+)?$', new_str):
    return True

整体代码如下

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param str string字符串 
# @return bool布尔型
#
class Solution:
    def is_space(self, s):
        return s != ' '
        
    def isNumeric(self , str: str) -> bool:
        # write code here
        # 去除空格
        if str == ".":
            return False
        
        str_rm_space = filter(self.is_space, str)
        new_str = ""
        for s in list(str_rm_space):
            new_str += s
        # 检查小数点个数
        dot_check = new_str.split('.')
        if len(dot_check) > 2:
            return False
        import re
        # 匹配数字和小数,包括小数
        if re.match('^(\+|\-|)(\d+)(\.(\d+|))?$', new_str):
            return True
        if re.match('^(\+|\-|)(\.\d+)$', new_str):
            return True
        # 匹配科学计数法数字
        if re.match('^(\+|\-|)(\d+)(\.\d+)(e|E)(\+|\-|)(\d+)(\.\d+)?$', new_str):
            return True
        if re.match('^(\+|\-|)(\d+)(\.)?(e|E)(\-|)(\d+)(\.\d+)?$', new_str):
            return True
        return False

全部评论

相关推荐

03-27 16:40
已编辑
门头沟学院 C++
26学院本太难了,很多公司机筛就给我刷了。机会都难拿到如果是简历存在问题也欢迎拷打————————————————————分割线——————————————————————2026.3.4更新:发完贴之后,时不时投递又收到了不少的笔试/面试邀请。主要是之前投递简历出去之后基本上都是沉默状态,年后好转了不少timeline:2026.01.21 文远知行笔试,半年多没刷算法题 ->挂 (后续HR说春招可以重新安排笔试)2026.2.4     小鹏汇天 技术一面,第二周收到结果 ->挂2026.2.12   大众Cariad代招 技术二面 ->Offer2026.2.28   多益网络技术面试,由于风评太差,一直在犹豫要不要接面试 ->推迟-----------分割线-----------2026.3 月前的某一天,临时去电网报名了二批计算机岗位的笔试2026.3.6 从上家公司实习离职,氛围最好的一家公司,leader 说可以帮忙转正,但是流程太长,而且我们部门据说只有一个 hc,更想要研究生,我很有可能是会被签外包公司在这里干活,就离职了。2026.3.9 入职新公司,大众Cariad 以外部公司的身份进组,项目组签了三年,后续三年应该都可以在这里呆,不知道有没有希望原地跳槽。2026.3.10 电网考试居然说我通过资格审查了,短信约我去参加资格审查,请假一天,买了 12 号晚上的机票回成都2026.3.15 参加国家电网计算机类笔试2026.3.17 电网出成绩了,感觉很低。觉得已经🈚️了2026.3.18 收到电网面试通知,通知 3.22-3.25 这个时间去面试,我的岗位只招 1 个人。据说面试只有 2-3 人,不知道能不能成功----------分割线-----------2026.3.21 电网面试结束,感觉回答的还勉勉强强,大概是2个岗位分别招1个人,一共11人面试,实际来了9人2026.3.27 出面试成绩,满分100分,早上10:20左右发现面试成绩46,我震惊了,没截图,后面过了十分钟重新看发现面试成绩给我改成58了。但同样震惊。朋友问我是不是把面试官打了,哈哈
点赞 评论 收藏
分享
03-18 01:22
门头沟学院 Java
肖先生~:先别说工资,现在有个工作就不错了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务