python中的正则表达式匹配用换行符分隔的字符串

时间:2017-09-28 18:47:11

标签: python regex string python-3.x

我有一个文字:

type: some_type
text text text text
more text more text more text
abcd abcd qwerty
mode some_mode

所以,我可以在第一行匹配:"^[ \\t]+type: some_type"。现在,我需要写regex以匹配typemode,它们可以由任意数量的文本行分隔。

我该怎么做?感谢。

2 个答案:

答案 0 :(得分:1)

您可以使用

^type:\ some_type  # search type: at the beginning of the line
.*?                # anything else afterwards, lazily
^mode\ some_mode   # search mode at the beginning of the line

使用MULTILINEVEROSEDOTALL模式,请参阅a demo on regex101.com

<小时/> 在Python中,这将是:

import re

rx = re.compile(r'''
    ^type:\ some_type
    .*?
    ^mode\ some_mode''', re.VERBOSE | re.MULTILINE | re.DOTALL)

string = """
type: some_type
text text text text
more text more text more text
abcd abcd qwerty
mode some_mode

type: some_other_type
text text text text
more text more text more text
abcd abcd qwerty
mode some_mode

type: some_type
text text text text
more text more text more text
abcd abcd qwerty
mode some_other_mode
"""

print(rx.findall(string))

这显然可以放在一个函数中,类型和/或模式作为要搜索的参数。

答案 1 :(得分:0)

对于模式和类型的条件,逐行循环可能更有意义。请参阅下面的伪代码

for line in lines:
   if type regex:
      do something
   elif mode regex
      do something else