How to search content between two strings, last match of start string first match of end string?
Example:
string = 'Part 1. Part 1. Part 2. Part 3 then more text'
I want to extract the content between Part 1 (inner most match) and Part 3 expected output is Part 2.
re.search(r'Part 1\.(.*?)Part 3', s).group(1) gives ' Part 1. Part 2. '
CodePudding user response:
You used .*? (non-greedy match) expecting to get the smallest substring between Part 1. and Part 3. But it captures from the first Part 1. till to the first occurrence of Part 3. So, you should negate the Part 1. in the capturing group
Part 1\.((?:(?!Part 1\.).)*)Part 3
See the regex demo
Python Example
re.search(r"Part 1\.((?:(?!Part 1\.).)*)Part 3", string).group(1) # ' Part 2. '
CodePudding user response:
I found the similar question
(?<=Part 1)(((?!Part 1).)*)(?=Part 3) would work well.
