如何在re.sub()

时间:2019-01-30 23:57:26

标签: python regex

我有一段文字,我想从中删除短语。

  

“改编”是指基于该作品的作品,或cAt基于该作品的作品,   其他先前存在的作品,例如f翻译,DOG改编,   衍生作品,音乐编排或其他   文学或艺术作品,录音制品f或表演,包括   电影改编或任何

我要删除cAtf之间,DOGf之间或rugratsf之间的所有文本。为了方便起见,我在文本框中突出显示了这些术语。

每个词组(cAtDOGrugratsf)在其前后都有一个空格。

这是我的代码

clean = `TEXT SHOWN ABOVE`
segment_start = [' cAt ', ' DOG ', ' rugrats ']
segment_end = ' f ' 

for start in enumerate(segment_start):
    clean = re.sub('{}.*{}{1}'.format(start, segment_end), ' ', clean)

我想剪掉

  

“改编”是指基于该作品的作品,或 cAt基于该作品和   其他先前存在的作品,例如f 翻译, DOG改编,   衍生作品,音乐编排或其他   文学或艺术作品或录音制品f 或表演,包括   电影改编或任何

最后以这个

  

“改编”是指基于作品或翻译或表演的作品,包括   电影改编或任何

我的代码出错。它先找到段的开头,然后再找到段结尾f的最后一次出现,并删除段之间的所有内容。

做到这一点

  

“改编”是指基于该作品的作品,或 cAt基于该作品和   其他先前存在的作品,例如f翻译,DOG改编,   衍生作品,音乐编排或其他   文学或艺术作品或录音制品f 或表演,包括   电影改编或任何

1 个答案:

答案 0 :(得分:1)

*是贪婪的重复:“ 0或更多,越多越好”。这样一来,您的第一场比赛就可以抢夺从cAt到最后f的一切,而对DOG查询则一无所获。

使用*?代替:“ 0或更多,尽可能少”。这样,正则表达式将只用cAt和第一个f之间的位就可以满足,并且DOG正则表达式也可以使用。