我最近开始学习Python编程。它如下:
对于s = 'xasdkbobobasdvobob'
,找到' bob'的出现次数。在s。
我已经能够编写一个能够输出2的代码但是我正在寻找的答案是3.
答案 0 :(得分:0)
您也可以尝试使用支持重叠匹配的新Python正则表达式模块。
import re
s = 'xasdkbobobasdvobob'
print(len(list(re.finditer('(?=bob)', s))))
Python正则表达式模块
答案 1 :(得分:0)
这个elsewhere on SO有基于正则表达式的解决方案,但你可以通过迭代查找每个“bob”而不需要RE来实现这一点:
s = 'xasdkbobobasdvobob'
pos = -1
count = 0
while True:
pos = s.find('bob', pos + 1) # search from the character after the start of the last find
if pos > -1: # found an instance
count += 1
else: # no more instances
break
print count
答案 2 :(得分:0)
选项1
使用regex
module:
import regex
len(regex.findall(r"bob", s, overlapped=True))
# 3
sum(1 for _ in regex.finditer(r"bob", s, overlapped=True))
# 3
选项2
应用滑动window algorithm。在这里,我们使用第三方工具more_itertools.windowed
:
import more_itertools as mit
sum(1 for w in mit.windowed(s, 3) if w == tuple("bob"))
# 3
通过> pip install more_itertools
安装library。