牛客网HJ1 字符串最后一个单词的长度Python3解法

 题目介绍:

可能出现的几种场景: 

   解法:(个人思路,如有不足,还请指正。)

import re
a = input()
# 字符串非空,且长度要小于5000字符
if len(a) >= 5000 or len(a) == 0:
    print("输入字符串要求非空且小于5000")
else:    
    # 将字符串按照空格分割,找出最后一个字符串
    b = a.split(str(" "))[-1]
    # 如果最后一个字符串全部为字母,则直接输出该字符串长度
    if b.isalpha() == True:
        print(len(b))
    else:
        # 如果最后一个字符串包含字符,比如引号'',感叹号等,用正则表达式将字母的部分找出来
        c = len(re.findall(r'[A-Za-z]', b))
        print(c)
        

涉及到的方法:

isalpha()方法:判断字符串是否只由字母构成,返回True、False

isdigit()方法:判断字符串是否只由数字构成,返回True、False

isalnum()方法:判断字符串是否只有数字字母构成,返回True、False

PS:这里的数字包括带圈的数字如①,字母包括汉字

正则表达式re.findall()方法:

(实际应用:就是题目中的要将一句话的最后一个单词找出来,但最后一个单词旁边有引号、感叹号等,可以只截取字母的部分)

import re
 
str = 'aabbabaabbaa'
#一个"."就是匹配除 \n (换行符)以外的任意一个字符
print(re.findall(r'a.b',str))#['aab', 'aab']
#*前面的字符出现0次或以上
print(re.findall(r'a*b',str))#['aab', 'b', 'ab', 'aab', 'b']
#贪婪,匹配从.*前面为开始到后面为结束的所有内容
print(re.findall(r'a.*b',str))#['aabbabaabb']
#非贪婪,遇到开始和结束就进行截取,因此截取多次符合的结果,中间没有字符也会被截取
print(re.findall(r'a.*?b',str))#['aab', 'ab', 'aab']
#非贪婪,与上面一样,只是与上面的相比多了一个括号,只保留括号的内容
print(re.findall(r'a(.*?)b',str))#['a', '', 'a']
 
str = '''aabbab
         aabbaa
         bb'''#后面多加了2个b
#没有把最后一个换行的aab算进来
print(re.findall(r'a.*?b',str))#['aab', 'ab', 'aab']
#re.S不会对\n进行中断
print(re.findall(r'a.*?b',str,re.S))#['aab', 'ab', 'aab', 'aa\n         b']

这部分有参考:https://blog.csdn.net/qq_36556893/article/details/89182067?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值