Python-正则表达式 - 在多行文本之间进行过滤

时间:2014-10-27 16:38:32

标签: python regex

我正在尝试从以下行分隔的文本文件中过滤'abc','def \ nghj','klm'。

********
abc
********
def
ghj
********
klm

我试图逃避'\*'字符并将其余字符分组(使用'.*?\*(.*)*.*'这样的表达式),但没有运气。

任何帮助表示感谢,提前感谢..

2 个答案:

答案 0 :(得分:0)

可以在多线模式下使用下面的内容 其中[*]{4}代表分隔符。

 # (?:^(?![*]{4}).*(?:\r?\n|$))+

 (?:
      ^ 
      (?! [*]{4} )
      .* 
      (?: \r? \n | $ )
 )+

输出:

 **  Grp 0 -  ( pos 10 , len 5 ) 
abc
--------------------

 **  Grp 0 -  ( pos 25 , len 10 ) 
def
ghj
---------------------

 **  Grp 0 -  ( pos 45 , len 3 ) 
klm  

答案 1 :(得分:0)

如果查找不包含星号符号的文本块,可以使用re.findall和多行模式:

text = '''********
abc
********
def
ghj
********
klm
'''
re.findall(r'^[^*]+$', text, re.M)

或者,如果要查找按星号分隔的文本块,则应使用re.split

re.split(r'(?:^|\n)\*+(?:\n|$)', text, re.M)