If we don't need to know the indexes of the occurrences we can use the method `count` from the String class. We can also indicate search boundaries (start, end).

```sub_sting = "apple"
print(f"Count of occurrences for '{sub_sting}': {my_string.count(sub_sting)}")

start = 5
end = 25
print(f"Count of occurrences for '{sub_sting}' from the interval [{start}, {end}]: {my_string.count(sub_sting, start, end)}")
```

Output:

```Count of occurrences for 'apple': 3
Count of occurrences for 'apple' from the interval [5, 25]: 1
```

Otherwise, if we also need start and end indexes ﻿of the occurrence we can use `re` (regular expression) package and its method `finditer`. Code example:

```import re

sub_sting = "apple"
occurrences = list(re.finditer(sub_sting, my_string))
for o in occurrences:
print(f"Find occurrence for '{sub_sting}': start={o.start()}, end={o.end()}")
print(f"Total occurrences count: {len(occurrences)}")
```

Output:

```Find occurrence for 'apple': start=0, end=5
Find occurrence for 'apple': start=15, end=20
Find occurrence for 'apple': start=26, end=31
Total occurrences count: 3
```

This method doesn't support interval params but we can perform this method for a substring. Something like this:

```import re

sub_sting = "apple"
start = 5
end = 25
﻿
occurrences = list(re.finditer(sub_sting, my_string[start:end]))
for o in occurrences:
print(f"Find occurrence for '{sub_sting}': start={o.start()}, end={o.end()}")
print(f"Total occurrences count: {len(occurrences)}")
```

Output:

```Find occurrence for 'apple': start=10, end=15
Total occurrences count: 1
```