How can we print a substring that occurs between two patterns? We are also provided an offset of a character in the string as an input to choose which substring needs to be printed.
E.g.
string = '<p >A quick brown fox</p><p >Jumps over</p>'
The substring that needs to be printed is between the patterns "> and </p>.
If the offset provided is 20 then A quick brown fox should be printed.
If the offset provided is 55 then Jumps over should be printed, this offset should be received as an input.
CodePudding user response:
The offset seems to be taken as a starting point for searching the nearest "> to the left and </p> to the right.
<p >A quick brown fox</p><p >Jumps over</p>
^ ^
offset 20 offset 55
In other words, find the rightmost "> in the substring from the beginning to the offset, and the leftmost </p> in the substring from the offset to the end.
For this, there are the find and rfind string methods.
>>> string.rfind('">', 0, 20)
13
>>> string.rfind('">', 0, 55)
49
>>> string.find('</p>', 20)
32
>>> string.find('</p>', 55)
61
Now you can use these indices to slice the string. You have to account for the fact that rfind returns the index before ">, but you need to slice after it, so you have to add its length (2) to the start index of the slice.
>>> start = string.rfind('">', 0, 20) 2
>>> end = string.find('</p>', 0, 20)
>>> string[start:end]
'A quick brown fox'
