简体   繁体   English

Python使用正则表达式为此模式查找文本

[英]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出现来分隔文本,

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). (实际文本在Linux上以\\r\\n开头)。 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']

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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