Regex python正则表达式:如何获取从某个单词到文本末尾的最小子字符串?

Regex python正则表达式:如何获取从某个单词到文本末尾的最小子字符串?,regex,python-3.x,Regex,Python 3.x,我正在分析一个文本,我想提取从某个单词出现到文本结尾的最小子字符串。我特别的问题是,这个词可能出现在我文本的几个部分 我尝试了以下方法: pattern = re.compile('(word)(.*?)$', re.DOTALL) result = re.search(pattern, MY_TEXT).group() 我的问题是,这不会导致返回尽可能最小的字符串,而是返回文本中找到的最大字符串(即:第一次出现的word,直到文本结束,而不是最后一次出现)。我确信在第二个括号内的*之后添加?

我正在分析一个文本,我想提取从某个单词出现到文本结尾的最小子字符串。我特别的问题是,这个词可能出现在我文本的几个部分

我尝试了以下方法:

pattern = re.compile('(word)(.*?)$', re.DOTALL)
result = re.search(pattern, MY_TEXT).group()
我的问题是,这不会导致返回尽可能最小的字符串,而是返回文本中找到的最大字符串(即:第一次出现的
word
,直到文本结束,而不是最后一次出现)。我确信在第二个括号内的
*
之后添加
字符可以解决问题,但事实并非如此

输入示例:

text = "Pokémon is a media franchise managed by The Pokémon Company, a Japanese consortium between Nintendo, Game Freak, and Creatures.\nThe franchise began as Pokémon Red and Green (later released outside of Japan as Pokémon Red and Blue)."
word = 'Pokémon'
我希望我的结果是字符串:
Pokémon Red and Blue)。
,但现在我得到了整个文本

我怎样才能得到我所期望的?
提前感谢。

我猜您希望将
Pokémon
的最后一个实例提取到输入字符串的末尾,例如这个表达式

^.*(Pokémon.*)$
很可能会这样做


您当前的模式
(神奇宝贝)(.*?$
有两个捕获组,其中它将只匹配第一个出现的
单词
,因为第二个组一直匹配到字符串末尾

为了得到最后一个单词,您可以使用
*神奇宝贝
,因为
*
将首先匹配到字符串的末尾,并将回溯到它可以匹配
神奇宝贝

然后字符串的其余部分将由以下值匹配:
*
该值位于第一个捕获组中

^.*(Pokémon .*)$
|

创建更具动态性的模式

text = "Pokémon is a media franchise managed by The Pokémon Company, a Japanese consortium between Nintendo, Game Freak, and Creatures.\nThe franchise began as Pokémon Red and Green (later released outside of Japan as Pokémon Red and Blue)."
word = "and"
pattern = r"^.*(" + re.escape(word) + ".*)$"
regex = re.compile(pattern, re.DOTALL)
result = re.search(regex, text).group(1)
print(result)
结果

蓝色)

如果单词也可以是句子中的最后一个单词,则可以使用否定的前瞻性断言右侧的字符不是非空白字符
(?!\S)

^.*(Pokémon(?!\S).*)$

示例输入和预期输出?要获得结果,您可以尝试
^.*(神奇宝贝。*)$
结果在第1组中。See在本例中工作得很好,但我如何才能得到更一般化的问题结果?你的意思是动态添加单词,后跟空格或单词边界吗?你的问题是,懒惰的
不计算第二次出现的次数,只要他遇到第一次。您可以添加一个前瞻来进行检查。类似于:
”(word)(?!*word)。*$”