如何在python中使用re模块匹配模式之间的行

时间:2011-02-23 09:03:44

标签: python regex

我有一个字符串(有多行),其中包含以下内容:

"Name=My name
Address=......
\##### To extract from here ####
line 1
line 2
line 3
\##### To extract till here ####
close"

如何提取包含模式的"##### To extract *"字符串之间的行?

输出应如下:

\##### To extract from here ####
line 1
line 2
line 3

4 个答案:

答案 0 :(得分:3)

pat = re.compile('\\\\##### To extract from here ####'
                 '.*?'
                 '(?=\\\\##### To extract till here ####)',
                 re.DOTALL)

pat = re.compile(r'\\##### To extract from here ####'
                 '.*?'
                 r'(?=\\##### To extract till here ####)',
                 re.DOTALL)

答案 1 :(得分:2)

你不需要正则表达式,简单的string.find就足够了。

只需找到两个字符串,然后输出它们之间的输入部分(通过切割字符串),注意避免输出第一个字符串(即注明其长度)。

或者,您可以使用两次拨打string.split

答案 2 :(得分:2)

Ofir是对的。这是一个相应的例子:

>>> s = """... your example string ..."""
>>> marker1 = "\##### To extract from here ####"
>>> marker2 = "\##### To extract till here ####"
>>> a = s.find(marker1)
>>> b = s.find(marker2, a + len(marker1))
>>> print s[a:b]
\##### To extract from here ####
line 1
line 2
line 3

答案 3 :(得分:0)

>>> s
'\nName=My name\nAddress=......\n\\##### To extract from here ####\nline 1\nline 2\nline 3\n\\##### To extract till here ####\nclose'
>>> for o in s.split("\n"):
...     if "##" in o and not flag:
...        flag=1
...        continue
...     if flag and not "##" in o:
...        print o
...     if "##" in o and flag:
...        flag=0
...        continue
...
line 1
line 2
line 3