Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 正则表达式匹配两个单词后的所有内容_Python_Regex_Lambda - Fatal编程技术网

Python 正则表达式匹配两个单词后的所有内容

Python 正则表达式匹配两个单词后的所有内容,python,regex,lambda,Python,Regex,Lambda,我一直在尝试使用正则表达式删除字符串的一部分 Heroes Chapter 91 - Rescue 我需要删除“章节号-”之后的所有内容,我不能删除“-”之后的所有内容,因为我不确定标题是否总是“英雄”,因此,如果标题是“-新蜘蛛侠”,它将删除错误的部分。“-”也是一样,如果它删除了“-”之后的所有内容,则可能会删除错误的部分。它必须是“章节号-”。我不知道我是否解释得很好 但是,我尝试过这样做: title = "Heroes Chapter 91 - Rescue" title = re.

我一直在尝试使用正则表达式删除字符串的一部分

Heroes Chapter 91 - Rescue
我需要删除“章节号-”之后的所有内容,我不能删除“-”之后的所有内容,因为我不确定标题是否总是“英雄”,因此,如果标题是“-新蜘蛛侠”,它将删除错误的部分。“-”也是一样,如果它删除了“-”之后的所有内容,则可能会删除错误的部分。它必须是“章节号-”。我不知道我是否解释得很好

但是,我尝试过这样做:

title = "Heroes Chapter 91 - Rescue"
title = re.sub('Chapter \d+ (\D+)', '', title)
但它会返回英雄

title = "Heroes Chapter 91 - Rescue"
title = re.sub('Chapter (\d+).*', '', title)
但它再次返回英雄

有什么想法吗

PD:有人链接到我,但我在那里找不到解决方案,如果有人看到,请指出。我显然不是专家:)

最终解决方案:

title = "Heroes Chapter 91 - Rescue"
title = re.sub('(Chapter \d+).*', '\\1', title)

当然会的
re.sub
替换整个字符串中匹配的部分。匹配的部分是“Chapter 91-Rescue”,因为它完全匹配模式“Chapter(\d+)(\d+)”,然后您将其完全替换为“”,因此它被删除。唯一无与伦比的部分是“英雄”

您可以再次匹配所有内容,但可以返回匹配字符串的一部分,而不是返回“”:

re.sub('(Chapter \d+).*', '\\1', title)
这样,就只保留了paren之间的子模式,而丢弃了其余的子模式。您将使用该模式保留“英雄第91章”,其中“英雄”不匹配,但“第91章-救援”匹配,章节编号后的部分以。*(贪婪星运算符匹配“直到任何非线性字符列表的末尾”)结尾。从该匹配中,只保留“第91章”,因为它匹配第一个子模式(parens中唯一的一个子模式),并且只获取并替换原始零件。这就是你如何保留“英雄”+“第91章”(去掉尾随部分-实际标题)

试试看

title = re.sub('(Chapter \d+) .*', '\1', title)
请尝试使用lookback:


re.sub(”(?您可以在此处使用捕获组
()
,并在替换中引用捕获的组

>>> re.sub('(Chapter \d+).*', '\\1', title)
'Heroes Chapter 91'

它返回了一个错误,我想它不支持:(也许它不支持量词。我知道。请再读一遍。再读一遍问题和答案。他想让“Heores Chapter 91”丢弃其余部分。谢谢你的帮助,我测试了它,它返回了“Heroes”出于某些原因。cheshicat的答案也会发生同样的情况,除非我做错了什么。>>>>title=“Heroes Chapter 91-Rescue”>>>>导入re>>>>re.sub('(Chapter\d+。*','\1',title)'Heroes\x01'在正则表达式匹配前后调试字符串(即,在控制台中使用断点或普通的旧打印)
>>> re.sub('(Chapter \d+).*', '\\1', title)
'Heroes Chapter 91'