python多行正则表达式

时间:2013-09-22 11:09:09

标签: python regex

如何在第一次出现提供者单词序列之前提取所有字符(包括换行符)?例如,输入以下内容:

输入文字:

"shantaram is an amazing novel.
It is one of the best novels i have read.
the novel is written by gregory david roberts.
He is an australian"

序列the 我想从shantaram中提取第一行the的文本,该文字位于第二行。

输出必须是 -

shantaram is an amazing novel.
It is one of the

我整个上午一直在努力。我可以编写表达式来提取所有字符,直到遇到特定的字符,但是如果我使用的表达式如下:

re.search("shantaram[\s\S]*the", string)

它与换行符不匹配。

3 个答案:

答案 0 :(得分:23)

您希望使用DOTALL选项来匹配换行符。来自doc.python.org

  

re.DOTALL

     

制作'。'特殊字符匹配任何字符,包括换行符;没有这个标志,'。'将匹配除换行符之外的任何内容。

演示:

In [1]: import re

In [2]: s="""shantaram is an amazing novel.
It is one of the best novels i have read.
the novel is written by gregory david roberts.
He is an australian"""

In [3]: print re.findall('^.*?the',s,re.DOTALL)[0]
shantaram is an amazing novel.
It is one of the

答案 1 :(得分:5)

使用此正则表达式,

re.search("shantaram[\s\S]*?the", string)

而不是

re.search("shantaram[\s\S]*the", string)

唯一的区别是'?'。通过使用'?'(例如*?,+?),您可以防止最长匹配。

答案 2 :(得分:0)

不使用正则表达式的解决方案:

from itertools import takewhile
def upto(a_string, stop):
    return " ".join(takewhile(lambda x: x != stop and x != "\n".format(stop), a_string))