txt = 'Port of Discharge/ Airport of destinationtXYZABCtttttttt44B'
I am doing:
reg_ind = [(m.start(0),m.end(0)) for m in re.finditer(r' port.{0,6}discharge.{0,3}/.{0,3}airport.{0,7}destination.*(?=44B)', txt,re.IGNORECASE | re.VERBOSE)]
print(reg_ind)
[(0, 56)]
print(txt[reg_ind[0][0]: reg_ind[0][1]])
Port of Discharge/ Airport of destination       XYZABC 
I want the index to end at Airport of destination.
Desired output:
print(reg_ind) [(0, 41)] print(txt[reg_ind[0][0]: reg_ind[0][1]]) Port of Discharge/ Airport of destination
Advertisement
Answer
You may move .* into the lookahead to avoid consuming that part of the match:
port.{0,6}discharge.{0,3}/.{0,3}airport.{0,7}destination(?=.*44B)
                                                         ^^^^^^^^
See a regex demo and a Python demo:
import re
txt =  'Port of Discharge/ Airport of destinationtXYZABCtttttttt44B'
pat = r' port.{0,6}discharge.{0,3}/.{0,3}airport.{0,7}destination(?=.*44B)'
reg_ind = [(m.start(0),m.end(0)) for m in re.finditer(pat, txt,re.IGNORECASE | re.VERBOSE)]
print(reg_ind) # => [(0, 41)]
