如何在第一次出现提供者单词序列之前提取所有字符(包括换行符)?例如,输入以下内容:
输入文字:
"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)
它与换行符不匹配。
答案 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))