Reputation: 7297
I want to separate the text based on occurrence of db access
in the following text,
db access alpha customer1
deny bla bla
db access beta customer99
permit bla bla
permit bla bla
permit bla bla
permit bla bla
db access game customer14
permit no
!
(Actual text start with \r\n
on linux). I want
db access alpha customer1
deny bla bla
and
db access beta customer99
permit bla bla
permit bla bla
permit bla bla
permit bla bla
and
db access game customer14
permit no
as separate element. I closest I can get is,
>>> re.findall('db\s+access.*?db\s+access',txt,re.M|re.S)
['db access alpha customer1\n deny bla bla\n db access']
and
>>> re.findall('db\s+access.*?!',txt,re.M|re.S)
['db access alpha customer1\n deny bla bla\n db access beta customer99\n permit bla bla\n permit bla bla\n permit bla bla\n permit bla bla\n db access game customer14\n permit no\n !']
Any suggestion will be helpful.
Upvotes: 0
Views: 50
Reputation: 123448
If you really want to make use of regex, then you could use a positive lookahead:
>>> txt = '''
...
... db access alpha customer1
... deny bla bla
... db access beta customer99
... permit bla bla
... permit bla bla
... permit bla bla
... permit bla bla
... db access game customer14
... permit no
... !'''
>>> re.findall('db\s+access.*?(?=db\s+access|!)',s,re.M|re.S)
['db access alpha customer1\n deny bla bla\n', 'db access beta customer99\n permit bla bla\n permit bla bla\n permit bla bla\n permit bla bla\n', 'db access game customer14\n permit no\n']
Upvotes: 1