Netro
Netro

Reputation: 7297

Python find text using regex for this pattern

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

Answers (1)

devnull
devnull

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

Related Questions