简体   繁体   中英

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.

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']

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM