Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 编写一个程序,打印字符串的次数';鲍勃';发生在s?其中s是预定义的_Python - Fatal编程技术网

Python 编写一个程序,打印字符串的次数';鲍勃';发生在s?其中s是预定义的

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 >>>

我试着为此编写一个代码。但它给了我正确的答案只有几次“鲍勃”不是同时出现的

代码: 打印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
>>> 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))