Please note that second bab starts where first one ends. This is why using in
command isn't giving accurate results.
Asked
Active
Viewed 39 times
2

Zircoz
- 504
- 3
- 14
1 Answers
2
You could use a regex
. I think what you want is a positive lookahead
. This basically means that you can search for overlapping occurrences of a pattern (bab
).
So, I created a regex101
for the expression that will work for this.
And implemented in Python:
import re
s = 'arbabababtybab'
o = re.findall('(?=(bab))', s)
n = len(o)
which gives o
(the occurrences) as a list
of: ['bab', 'bab', 'bab', 'bab']
and n
as the number of them (the count): 4
.
Alternatively, you could use string slicing
to do this with a list-comprehension
:
s = 'arbabababtybab'
o = [s[i:i+3] for i in range(len(s)-2) if s[i:i+3] == 'bab']
n = len(o)
which gives the same results as above.

Joe Iddon
- 20,101
- 7
- 33
- 54
-
`sum(1 for i in range(len(s)-2) if s[i:].startswith('bab')]` – Ignacio Vazquez-Abrams Dec 23 '17 at 13:41