我有一个字符串(有多行),其中包含以下内容:
"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
答案 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