题目介绍:
可能出现的几种场景:
解法:(个人思路,如有不足,还请指正。)
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']