如何使用rfind方法筛选出以'ing'结尾的单词?
如何使用rfind方法筛选出以'ing'结尾的单词?
嘿,我来帮你排查下问题所在~
你当前的代码有两个核心问题:
rfind()是用来查找普通子串最后出现位置的方法,它完全不支持正则表达式。你写的x.rfind(r'\b(\w+ing)\b')是在整个输入字符串里找\b(\w+ing)\b这个字面文本,显然你的输入里没有这个内容,所以它会返回-1。而Python的if判断里,非零值(包括-1)都会被视为True,这就导致所有单词都被打印出来了。- 你应该针对每个拆分后的单词(也就是循环里的
y)做检查,而不是拿着整个输入字符串x去判断。
既然要求用rfind()来实现,我们可以这样修改代码:
x = str(input("Enter some random words: ")) for y in x.split(): # 查找'ing'在当前单词最后出现的位置 ing_position = y.rfind('ing') # 如果找到'ing',且位置刚好是单词的结尾(因为'ing'是3个字符,所以位置等于单词长度减3) if ing_position != -1 and ing_position == len(y) - 3: print(y, end=' ')
当你输入 How are you doing and hows it going 时,这段代码就会输出 doing going,完全符合你的需求。
简单拆解下逻辑:
- 对每个拆分后的单词,用
rfind('ing')定位'ing'最后出现的索引位置。 - 如果这个位置不等于
-1(说明找到了'ing'),并且这个位置刚好是单词长度减3(说明'ing'在单词的最后三位,也就是结尾),就打印这个单词。
如果后续不需要局限于rfind(),其实用y.endswith('ing')会更简洁直观,但既然要求用rfind(),上面的写法就完全能解决问题啦~
备注:内容来源于stack exchange,提问作者Afroboy23
相关产品推荐
相关产品推荐

