鉴于字符串:
\n \n text1\n \ttext2\n Message: 1st message\n some more text\n \n \n Message: 2dn message\n\n \t\t Message: 3rd message\n text3\n
我想从多行字符串中提取消息(令牌是'消息:')。我应该使用什么正则表达式来捕获这3组:
我尝试了很多东西,但我可以让表达式工作,因为字符串是一个多行字符串。
我的程序是在python 2.6中,但我认为它对我使用的语言没有太大影响......
答案 0 :(得分:9)
>>> re.findall('Message: (.+?)$', s, re.M)
['1st message', '2dn message', '3rd message']
re.M
flag gives special meaning to ^
and $
:
指定时,模式字符
'^'
匹配字符串的开头和每行的开头(紧跟在每个换行符之后);模式字符'$'
在字符串的末尾和每行的末尾(紧接在每个换行符之前)匹配。默认情况下,'^'
仅匹配字符串的开头,'$'
仅匹配字符串的结尾,紧接在字符串末尾的换行符(如果有)之前。
(.+?)$
匹配至少一个字符,直到字符串字符的最近端。
编辑:确实简单版本也可以使用:
>>> re.findall('Message: (.+)', s)
['1st message', '2dn message', '3rd message']
我很惊讶它不在你尝试过的众多事情的清单中。)
答案 1 :(得分:0)
@ OP,你不需要正则表达式。假设您不关心"Message:"
之后的行,
for line in mystring.split("\n")
if "Message:" in line:
print "found: ",line