delete from pattern to pattern if it contains match

Jussi Piitulainen jussi.piitulainen at helsinki.fi
Thu Apr 21 09:32:46 EDT 2016


harirammanohar at gmail.com writes:

> On Monday, April 18, 2016 at 12:38:03 PM UTC+5:30,
> hariram... at gmail.com wrote:
>> HI All,
>> 
>> can you help me out in doing below. 
>> 
>> file: 
>> <start> 
>>  guava 
>> fruit 
>> <end> 
>> <start> 
>>  mango 
>> fruit 
>> <end> 
>> <start> 
>>  orange 
>> fruit 
>> <end> 
>> 
>> need to delete from start to end if it contains mango in a file...
>> 
>> output should be: 
>> 
>> <start> 
>>  guava 
>> fruit 
>> <end> 
>> <start> 
>>  orange 
>> fruit 
>> <end> 
>> 
>> Thank you
>
> any one can guide me ? why xml tree parsing is not working if i have
> root.tag and root.attrib as mentioned in earlier post...

Assuming the real consists of lines between a start marker and end
marker, a winning plan is to collect a group of lines, deal with it, and
move on.

The following code implements something close to the plan. You need to
adapt it a bit to have your own source of lines and to restore the end
marker in the output and to account for your real use case and for
differences in taste and judgment. - The plan is as described above, but
there are many ways to implement it.

from io import StringIO

text = '''\
<start> 
  guava 
fruit 
<end> 
<start>
  mango
fruit
<end>
<start> 
  orange 
fruit 
<end> 
'''

def records(source):
    current = []
    for line in source:
        if line.startswith('<end>'):
            yield current
            current = []
        else:
            current.append(line)

def hasmango(record):
    return any('mango' in it for it in record)

for record in records(StringIO(text)):
    hasmango(record) or print(*record)



More information about the Python-list mailing list