正则表达式“清除”某些重复模式识别的后缀中的主要单词

时间:2016-05-03 23:16:27

标签: regex notepad++

我有这个exaple列表

Veep - Season 1 BDMux.torrent
Vegas S01e01-21.torrent
Velvet S01e13.torrent
Velvet.e10.torrent
Velvet_e01.torrent
Veronica Mars s01.torrent
Vicious S01e01-06.torrent
Victor Ros S01e01-06.torrent
Video.Game.High.School.S01e01-09.XviD.torrent
Vikings - Season 1 EXT.torrent
Vikings_S04e04.avi.torrent

我想要消除类似天鹅绒的线条。或velvet_并合并为一个,最后像这样打印

Veep
Vegas
Velvet
Veronica Mars
Victor Ros
Video Game High School
Vikings

如何使用正则表达式?

1 个答案:

答案 0 :(得分:0)

要在一个正则表达式中做所有这些,我说是不可能的。但是,这个正则表达式

^(.*?)[ ._-]*(?:s\w*\s*\d+)?(?:e\d\d(?:-\d\d)?)?[\s.]*\w*?\.torrent(?:[\s\S]*\1.*$)*$

处理你向我们扔的东西;)。但是只有 - 它无法移除Video.Game.High.School等标题中的点。

并且 - 它需要对节目进行分组,例如在您的示例中(例如,所有Velvet组合在一起)。这应该可以通过Notepad++ Edit>Line Operations>Sort Lines in Ascending轻松解决。

Check it out here at regex101

它的作用是捕获一切到季节和/或剧集,允许可选格式并最终匹配.torrent。然后它可选地匹配所有内容,直到可能重复捕获的第一个以及随后到达行尾的任何内容。重复最后一步,直到找不到匹配项。捕获组现在保存节目的名称,但正则表达式匹配节目的所有行。因此,用捕获替换整个匹配,每个节目只留下一个干净的条目。

这意味着当节目名称以另一个节目的完整名称开头时,它不会处理,例如American CrimeAmerican Crime Story,因为第一个匹配第二个,因此保持匹配直到第二个结束。这可以通过在正则表达式的第二部分中包含季节/剧集的测试来修复,但我选择了这个来保持它更简单和更快。

所以,你在评论中说"正则表达式不需要是完美的"。嗯,这是一个为你完成大部分工作的人 - 但并不完美。

此致

修改

进行了一些更新并简化了正则表达式。如果您想要更具体的一个,那么这就是旧的:

^(.*?)[ ._]?(?:-? season \d+|(?:s\d\d)?(?:e\d\d(?:-\d\d)?)?)[\s.]*(?:bdmux|xvid|ext|avi)?\.torrent(?:[\s\S]*\1.*$)*$