Python 编写一个程序,打印字符串的次数';鲍勃';发生在s?其中s是预定义的
我试着为此编写一个代码。但它给了我正确的答案只有几次“鲍勃”不是同时出现的 代码: 打印s.count('bob')这可以简单到:Python 编写一个程序,打印字符串的次数';鲍勃';发生在s?其中s是预定义的,python,Python,我试着为此编写一个代码。但它给了我正确的答案只有几次“鲍勃”不是同时出现的 代码: 打印s.count('bob')这可以简单到: from re import findall len(findall("(?=bob)", s)) 示例: >>> from re import findall >>> s = "Helo bob; I'm bob" >>> len(findall("(?=bob)", s)) 2 >>>
from re import findall
len(findall("(?=bob)", s))
示例:
>>> from re import findall
>>> s = "Helo bob; I'm bob"
>>> len(findall("(?=bob)", s))
2
>>> s = "Hello Fred!"
>>> len(findall("(?=bob)", s))
0
>>> s = "bobbobboul"
>>> len(findall("(?=bob)", s))
2
>>> len(findall("(?=bob)", s))
2
为了计算重叠的子字符串,您必须实现一个辅助函数(不适用于您):
另一种选择是按照Pruthvi Raj的建议使用regex lookahead。在regex中使用lookahead查找重叠发生
import re
len(re.findall('(?=bob)',s))
我们能举一个s的例子吗?
bobob
被认为是1个还是2个bob?:)哈哈;是的,好问题:)Bobb被认为是2 bob's你不应该使用count
来计算重叠的子字符串:假设's'是Bobboboul,该代码为其提供了错误的输出。修复了该边缘情况。在你的第一个示例中,你得到了错误的输出,对吗?它包含1个'bob',当你得到2个作为输出*哇,是的;另一个边缘案例@JamesMills这为bobob
提供了1
,因为正则表达式bob
消耗文本,所以使用lookahead匹配而不消耗文本这可能涵盖所有边缘情况。谢谢@尼桑塔瓦:是的,它起作用了。谢谢
import re
len(re.findall('(?=bob)',s))